import type { Localidad } from '../Contratos/Interfaces/Interfaces';

/**
 * Mapea el contacto del backend (CodConCli, NomViaDomFis, etc.) al formato del formulario (NomVia, CodLoc, etc.).
 */
export function mapContactoToForm(contacto: any): Record<string, unknown> {
    if (!contacto) return {};
    const loc = contacto.localidad || contacto.Localidad;
    const provincia = loc?.provincia || contacto.provincia;
    const cpFiscal = contacto.CPLocFis ?? loc?.CPLoc ?? '';
    return {
        CodConCli: contacto.CodConCli ?? '',
        NomConCli: contacto.NomConCli ?? '',
        NumColegiado: contacto.NumColeCon ?? contacto.NumColegiado ?? '',
        NumComercialAudax: contacto.NumComercialAudax ?? contacto.nrcomercialacreditado ?? '',
        NumComercialAdx: contacto.NumComercialAdx ?? contacto.nrcomercialacreditadoadx ?? '',
        NIFConCli: contacto.NIFConCli ?? '',
        CarConCli: contacto.CarConCli ?? '',
        TelFijConCli: contacto.TelFijConCli ?? '',
        TelCelConCli: contacto.TelCelConCli ?? '',
        TelPersonal: contacto.telpersonal ?? contacto.TelPersonal ?? '',
        EmaConCli: contacto.EmaConCli ?? contacto.EmaCli ?? '',
        EmaPersonal: contacto.emapersonal ?? contacto.EmaPersonal ?? '',
        RecibeCorreoMasivo: Boolean(contacto.recibe_correo_masivo),
        NumIBAN: contacto.iban ?? contacto.numeroCuenta ?? '',
        Observaciones: contacto.ObsConC ?? contacto.ObsCli ?? '',
        CodTipVia: contacto.CodTipViaFis != null ? String(contacto.CodTipViaFis) : '',
        NomVia: contacto.NomViaDomFis ?? '',
        NumVia: contacto.NumViaDomFis ?? '',
        Bloque: contacto.BloPunSum ?? '',
        Escalera: contacto.EscPunSum ?? '',
        Planta: contacto.PlaPunSum ?? '',
        Puerta: contacto.PuePunSum ?? '',
        CodigoPostal: cpFiscal,
        Provincia: provincia?.DesPro ?? '',
        Localidad: loc?.DesLoc ?? '',
        CodLoc: contacto.CodLocFis != null ? String(contacto.CodLocFis) : '',
        CodPro: provincia?.CodPro != null ? String(provincia.CodPro) : '',
    };
}

/** Localidad para el Typeahead (join CodLocFis → T_Localidad + provincia). */
export function buildInitialLocalidadFromContacto(contacto: any): Localidad | null {
    const loc = contacto?.localidad || contacto?.Localidad;
    if (!loc || loc.CodLoc == null) return null;
    const prov = loc.provincia;
    const codPro = prov?.CodPro != null ? Number(prov.CodPro) : loc.CodPro != null ? Number(loc.CodPro) : 0;
    return {
        CodLoc: Number(loc.CodLoc),
        CPLoc: String(loc.CPLoc ?? contacto.CPLocFis ?? ''),
        DesLoc: String(loc.DesLoc ?? ''),
        provincia: {
            CodPro: codPro,
            DesPro: String(prov?.DesPro ?? ''),
        },
    };
}
