import { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from "typeorm";
import { Tenant } from "./tenant.entity";

// Config por tenant que hoy son variables de entorno globales — sobre todo
// WhatsApp, que necesita numero/token propio por cliente.
@Entity("tenant_config")
export class TenantConfig {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ name: "tenant_id", unique: true })
  tenantId: number;

  @OneToOne(() => Tenant)
  @JoinColumn({ name: "tenant_id" })
  tenant: Tenant;

  @Column({
    name: "whatsapp_phone_number_id",
    type: "varchar",
    length: 64,
    nullable: true,
  })
  whatsappPhoneNumberId: string | null;

  // Cifrado con CredentialsCryptoService, igual que Tenant.dbPasswordEncrypted.
  @Column({ name: "whatsapp_access_token_encrypted", type: "text", nullable: true })
  whatsappAccessTokenEncrypted: string | null;

  @Column({
    name: "whatsapp_template_language",
    type: "varchar",
    length: 16,
    nullable: true,
  })
  whatsappTemplateLanguage: string | null;

  @Column({
    name: "whatsapp_template_cotizacion",
    type: "varchar",
    length: 128,
    nullable: true,
  })
  whatsappTemplateCotizacion: string | null;

  @Column({
    name: "whatsapp_template_estado",
    type: "varchar",
    length: 128,
    nullable: true,
  })
  whatsappTemplateEstado: string | null;

  @Column({
    name: "whatsapp_default_country_code",
    type: "varchar",
    length: 8,
    nullable: true,
  })
  whatsappDefaultCountryCode: string | null;

  // Toggles operativos -- ver AddOperationalTogglesToTenantConfig. Deciden
  // si el checklist operativo y el gate de "Activar" deben exigir cada pieza
  // (tiendas/productos/facturacion) o si este tenant explicitamente no la
  // necesita.
  @Column({ name: "permite_tiendas", type: "tinyint", width: 1, default: 1 })
  permiteTiendas: boolean;

  @Column({ name: "permite_productos_propios", type: "tinyint", width: 1, default: 1 })
  permiteProductosPropios: boolean;

  @Column({ name: "factura_habilitada", type: "tinyint", width: 1, default: 1 })
  facturaHabilitada: boolean;

  // La config de facturacion POS NO vive aca: un tenant puede operar varias
  // tiendas fisicas (OrdenTrabajo.tiendaId), y "computadora" en POSTouch
  // resuelve a UNA tienda/caja puntual (Domicilio::createOrdenesEdngt ->
  // login($parG) fija $par segun el computadora recibido). Guardarla una
  // sola vez por tenant mandaria las OTs de TODAS las tiendas a la misma
  // tienda/caja de POSTouch. Ahora vive por tienda, en maetie
  // (taller_facturacion_pos_* — ver Tienda entity y AddTiendaFacturacionPosConfig).
}
