import { ActualizarParametrosTenantDto } from "./dto/actualizar-parametros-tenant.dto";
import { TallerParametroClave } from "./taller-parametros.catalogo";

// Mapa campo camelCase del DTO -> clave punteada del catálogo (Task 2).
// El controlador (Task 20) usa esto para traducir el body HTTP a las claves
// que TallerParametrosService entiende, sin que el DTO conozca el catálogo.
export const MAPEO_TENANT: Record<keyof ActualizarParametrosTenantDto, TallerParametroClave> = {
  usaFacturacion: "facturacion.usa_facturacion",
  usaValidacionInventario: "inventario.usa_validacion",
  permiteCrearProductos: "productos.permite_crear",
  permiteCrearTiendas: "tiendas.permite_crear",
  usaWhatsapp: "notificaciones.usa_whatsapp",
  whatsappPhoneNumberId: "notificaciones.whatsapp_phone_number_id",
  whatsappAccessToken: "notificaciones.whatsapp_access_token",
  whatsappApiVersion: "notificaciones.whatsapp_api_version",
  whatsappTemplateCotizacion: "notificaciones.whatsapp_template_cotizacion",
  whatsappTemplateEstado: "notificaciones.whatsapp_template_estado",
  whatsappTemplateLanguage: "notificaciones.whatsapp_template_language",
  whatsappDefaultCountryCode: "notificaciones.whatsapp_default_country_code",
  usaFotos: "ot.usa_fotos",
  usaDanos: "ot.usa_danos",
  usaPdfEscaner: "ot.usa_pdf_escaner",
  usaCosasTrae: "ot.usa_cosas_trae",
  usaMecanicos: "ot.usa_mecanicos",
  usaFirmaCliente: "ot.usa_firma_cliente",
  usaFirmaRecepcion: "ot.usa_firma_recepcion",
  exigeFechaSalida: "ot.exige_fecha_salida",
  unaOtPorVehiculo: "ot.una_ot_por_vehiculo",
  bloqueaVentaBajoCosto: "cotizacion.bloquea_venta_bajo_costo",
  exigeMotivoCambio: "cotizacion.exige_motivo_cambio",
  usaLinkPublicoCotizacion: "cotizacion.usa_link_publico",
  usaEstadoPublico: "ot.usa_estado_publico",
  usaHistorial: "modulos.usa_historial",
  usaReportes: "modulos.usa_reportes",
  usaCargasMasivas: "modulos.usa_cargas_masivas",
  usaBitacora: "modulos.usa_bitacora",
  imprimeRecepcion: "impresion.recepcion",
  imprimeCotizacion: "impresion.cotizacion",
  imprimeEntrega: "impresion.entrega",
  imprimeOrdenInterna: "impresion.orden_interna",
  exigePagoParaEntrega: "facturacion.exige_pago_para_entrega",
};

export function dtoAValoresTenant(
  dto: ActualizarParametrosTenantDto,
): Partial<Record<TallerParametroClave, unknown>> {
  const valores: Partial<Record<TallerParametroClave, unknown>> = {};
  for (const [campo, clave] of Object.entries(MAPEO_TENANT) as Array<
    [keyof ActualizarParametrosTenantDto, TallerParametroClave]
  >) {
    const valor = dto[campo];
    if (valor !== undefined) {
      valores[clave] = valor;
    }
  }
  return valores;
}
