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",
};

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;
}
