import { FLAGS_UI } from "./taller-parametros.catalogo";
import { MAPEO_TENANT, dtoAValoresTenant } from "./taller-parametros.mapeo";

describe("dtoAValoresTenant", () => {
  it("solo incluye los campos definidos en el DTO, mapeados a su clave del catálogo", () => {
    const resultado = dtoAValoresTenant({ usaFacturacion: false, whatsappPhoneNumberId: "123" });
    expect(resultado).toEqual({
      "facturacion.usa_facturacion": false,
      "notificaciones.whatsapp_phone_number_id": "123",
    });
  });

  it("un DTO vacío produce un objeto vacío", () => {
    expect(dtoAValoresTenant({})).toEqual({});
  });

  it("los campos de operacion se traducen a su clave del catálogo", () => {
    expect(
      dtoAValoresTenant({
        usaFotos: true,
        exigePagoParaEntrega: false,
        imprimeOrdenInterna: true,
      }),
    ).toEqual({
      "ot.usa_fotos": true,
      "facturacion.exige_pago_para_entrega": false,
      "impresion.orden_interna": true,
    });
  });

  it("todo flag de FLAGS_UI que no es de los 4 históricos se acepta con el mismo nombre en el PUT", () => {
    const historicos = [
      "usaFacturacion",
      "permiteTiendas",
      "permiteProductosPropios",
      "usaWhatsapp",
    ];
    for (const [flag, clave] of Object.entries(FLAGS_UI)) {
      if (historicos.includes(flag)) continue;
      expect(MAPEO_TENANT[flag as keyof typeof MAPEO_TENANT]).toBe(clave);
    }
  });

  it("MAPEO_TENANT cubre las claves tenant-scope relevantes al formulario", () => {
    expect(Object.values(MAPEO_TENANT).sort()).toEqual(
      [
        "facturacion.usa_facturacion",
        "inventario.usa_validacion",
        "productos.permite_crear",
        "tiendas.permite_crear",
        "notificaciones.usa_whatsapp",
        "notificaciones.whatsapp_phone_number_id",
        "notificaciones.whatsapp_access_token",
        "notificaciones.whatsapp_api_version",
        "notificaciones.whatsapp_template_cotizacion",
        "notificaciones.whatsapp_template_estado",
        "notificaciones.whatsapp_template_language",
        "notificaciones.whatsapp_default_country_code",
        "ot.usa_fotos",
        "ot.usa_danos",
        "ot.usa_pdf_escaner",
        "ot.usa_cosas_trae",
        "ot.usa_mecanicos",
        "ot.usa_firma_cliente",
        "ot.usa_firma_recepcion",
        "ot.exige_fecha_salida",
        "ot.una_ot_por_vehiculo",
        "cotizacion.bloquea_venta_bajo_costo",
        "cotizacion.exige_motivo_cambio",
        "cotizacion.usa_link_publico",
        "ot.usa_estado_publico",
        "modulos.usa_historial",
        "modulos.usa_reportes",
        "modulos.usa_cargas_masivas",
        "modulos.usa_bitacora",
        "impresion.recepcion",
        "impresion.cotizacion",
        "impresion.entrega",
        "impresion.orden_interna",
        "facturacion.exige_pago_para_entrega",
      ].sort(),
    );
  });
});
