import type { LucideIcon } from 'lucide-react';
import { CalendarClock, Cpu, MapPin, User, Zap } from 'lucide-react';

export type SuministroFieldFormat = 'text' | 'number' | 'power' | 'date' | 'currency';

export interface SuministroFieldDefinition {
    id: string;
    label: string;
    keys: string[];
    format: SuministroFieldFormat;
    highlight?: boolean;
}

export interface SuministroSectionDefinition {
    id: string;
    title: string;
    icon: LucideIcon;
    fields: SuministroFieldDefinition[];
}

export const SUMINISTRO_ELECTRICO_SECTIONS: SuministroSectionDefinition[] = [
    {
        id: 'identificacion',
        title: 'Identificación del suministro',
        icon: Zap,
        fields: [
            { id: 'sips-cups', label: 'CUPS', keys: ['CUPS'], format: 'text', highlight: true },
            { id: 'sips-cod-dist', label: 'Código distribuidora', keys: ['Cod_Dist'], format: 'text' },
            { id: 'sips-distribuidora', label: 'Distribuidora', keys: ['Distribuidora'], format: 'text' },
            { id: 'sips-tarifa', label: 'Tarifa', keys: ['Tarifa'], format: 'text' },
            { id: 'sips-des-tarifa', label: 'Descripción Tarifa', keys: ['Des_Tarifa'], format: 'text' },
            { id: 'sips-tension', label: 'Tensión', keys: ['Tension'], format: 'text' },
        ],
    },
    {
        id: 'ubicacion',
        title: 'Ubicación del suministro',
        icon: MapPin,
        fields: [
            { id: 'sips-dir-suministro', label: 'Dirección suministro', keys: ['Direccion_Suministro'], format: 'text' },
            {
                id: 'sips-cp-suministro',
                label: 'C.P. suministro',
                keys: ['Cod_Postal_Suministro', 'CodigoPostal_Suministro'],
                format: 'text',
            },
            { id: 'sips-localidad-suministro', label: 'Localidad suministro', keys: ['Localidad_Suministro'], format: 'text' },
            { id: 'sips-provincia-suministro', label: 'Provincia suministro', keys: ['Provincia_Suministro'], format: 'text' },
        ],
    },
    {
        id: 'equipos',
        title: 'Equipos y perfil técnico',
        icon: Cpu,
        fields: [
            { id: 'sips-indicativo-icp', label: 'Indicativo ICP', keys: ['Indicativo_ICP'], format: 'text' },
            { id: 'sips-propiedad-icp', label: 'Propiedad ICP', keys: ['Propiedad_ICP'], format: 'text' },
            { id: 'sips-telegestionado', label: 'Telegestionado', keys: ['telegestion', 'Telegestionado_Activo'], format: 'text' },
            { id: 'sips-perfil-consumo', label: 'Perfil consumo', keys: ['Perfil_Consumo'], format: 'text' },
            { id: 'sips-tipo-pm', label: 'Tipo PM', keys: ['Tipo_PM'], format: 'text' },
            { id: 'sips-propiedad-em', label: 'Propiedad EM', keys: ['Propiedad_Equipo_Medida'], format: 'text' },
            { id: 'sips-ultima-comer', label: 'Última Comercializadora', keys: ['last_comer_known', 'Comercialitzadora'], format: 'text' },
        ],
    },
    {
        id: 'titular',
        title: 'Titular y datos administrativos',
        icon: User,
        fields: [
            { id: 'sips-titular', label: 'Titular del suministro', keys: ['NombreCompleto_Titular', 'Nombre_Titular'], format: 'text' },
            { id: 'sips-cif-titular', label: 'CIF Titular', keys: ['CIF_Titular'], format: 'text' },
            { id: 'sips-dir-titular', label: 'Dirección del Titular', keys: ['Direccion_Titular'], format: 'text' },
            { id: 'sips-cp-titular', label: 'C.P. del Titular', keys: ['Cod_Postal_Titular'], format: 'text' },
            { id: 'sips-localidad-titular', label: 'Localidad Titular', keys: ['Municipio_Titular'], format: 'text' },
            { id: 'sips-provincia-titular', label: 'Provincia Titular', keys: ['Provincia_Titular'], format: 'text' },
            { id: 'sips-cnae-code', label: 'Código CNAE', keys: ['cnae_code'], format: 'text' },
            { id: 'sips-cnae-desc', label: 'CNAE', keys: ['cnae_desc'], format: 'text' },
            { id: 'sips-telefono-titular', label: 'Teléfono', keys: ['Telefono_Titular'], format: 'text' },
            { id: 'sips-tipo-titular', label: 'Tipo titular', keys: ['Tipo_Titular', 'Persona'], format: 'text' },
            { id: 'sips-persona-contacto', label: 'Persona de Contacto', keys: ['persona_contacto'], format: 'text' },
            { id: 'sips-cargo-contacto', label: 'Cargo del Contacto', keys: ['cargo_persona_contacto'], format: 'text' },
            { id: 'sips-primera-vivienda', label: 'Primera vivienda', keys: ['Primera_vivienda'], format: 'text' },
            { id: 'sips-cortes', label: 'Cortes', keys: ['Cortes'], format: 'number' },
            { id: 'sips-impago', label: 'Impago', keys: ['Impago'], format: 'number' },
            { id: 'sips-deposito', label: 'Depósito garantía', keys: ['importeDepositoGarantiaEuros', 'Fianza'], format: 'currency' },
        ],
    },
    {
        id: 'potencias-fechas',
        title: 'Potencias y fechas contractuales',
        icon: CalendarClock,
        fields: [
            { id: 'sips-pot-p1', label: 'Potencia contratada P1 (kW)', keys: ['Pot_Cont_P1'], format: 'power' },
            { id: 'sips-pot-p2', label: 'Potencia contratada P2 (kW)', keys: ['Pot_Cont_P2'], format: 'power' },
            { id: 'sips-pot-p3', label: 'Potencia contratada P3 (kW)', keys: ['Pot_Cont_P3'], format: 'power' },
            { id: 'sips-pot-p4', label: 'Potencia contratada P4 (kW)', keys: ['Pot_Cont_P4'], format: 'power' },
            { id: 'sips-pot-p5', label: 'Potencia contratada P5 (kW)', keys: ['Pot_Cont_P5'], format: 'power' },
            { id: 'sips-pot-p6', label: 'Potencia contratada P6 (kW)', keys: ['Pot_Cont_P6'], format: 'power' },
            { id: 'sips-pot-max-bie', label: 'Potencia máxima BIE', keys: ['Pot_Max_BIE'], format: 'power' },
            { id: 'sips-pot-max-apm', label: 'Potencia máxima APM', keys: ['Pot_Max_Puesta'], format: 'power' },
            { id: 'sips-der-acceso', label: 'Derechos de acceso (kW)', keys: ['Der_Acceso_Llano', 'Der_Extension'], format: 'power' },
            { id: 'sips-rel-transformacion', label: 'Relación de transformación', keys: ['Relacion_Transformacion'], format: 'text' },
            { id: 'sips-fec-camb-comer', label: 'Fecha Cambio Comercializadora', keys: ['Fec_Ult_Camb_Comer'], format: 'date' },
            { id: 'sips-fec-alta', label: 'Fecha de alta', keys: ['Fec_Alta_Suministro'], format: 'date' },
            { id: 'sips-fec-ult-lect', label: 'Fecha última lectura', keys: ['Fec_Ult_Lect', 'lastlectura'], format: 'date' },
            {
                id: 'sips-fec-caducidad',
                label: 'Fecha caducidad BIE o APM',
                keys: ['Fec_Lim_Exten', 'fechaLimiteDerechosReconocidos'],
                format: 'date',
            },
            { id: 'sips-sum-contratable', label: 'Suministro contratable', keys: ['Suministro_Contratable'], format: 'text' },
            { id: 'sips-est-no-contratable', label: 'Estado no contratable', keys: ['Estado_No_Contratable'], format: 'text' },
        ],
    },
];

export const SUMINISTRO_FIELD_COUNT = SUMINISTRO_ELECTRICO_SECTIONS.reduce(
    (total, section) => total + section.fields.length,
    0,
);
