import { useMemo } from 'react';
import { PropuestaComercial } from '../../Interfaces/Interfaces';

interface ContratoAsociado {
    id: number;
    NumCon: string;
    label: string;
    tipo: 'LUZ' | 'GAS';
    CodCups: string;
}

/**
 * Hook para extraer los números de contrato únicos asociados a los CUPS
 * de una propuesta comercial.
 *
 * Similar a como se extraen las comercializadoras únicas, este hook
 * recorre todos los CUPS (eléctricos y gas) y obtiene los contratos únicos.
 */
export const useContratosAsociados = (datos: PropuestaComercial) => {
    const contratosAsociados = useMemo(() => {
        if (!datos?.propuesta_comercial_cliente) return [];

        const contratosMap = new Map<string, ContratoAsociado>();
        let idCounter = 1;

        datos.propuesta_comercial_cliente.forEach((clienteData) => {
            (clienteData.propuesta_comercial_cups || []).forEach((cupsData) => {
                // Verificar si el CUPS tiene un número de contrato
                if (cupsData.NrContratoAudax) {
                    const numCon = String(cupsData.NrContratoAudax).trim();
                    const tipoCups = cupsData.TipCups === 1 ? 'LUZ' : 'GAS';

                    // Si no existe en el Map y no está vacío, lo agregamos
                    if (numCon && !contratosMap.has(numCon)) {
                        const CodigoCUPS = tipoCups === 'LUZ' ? cupsData.cups_electrico.CUPsEle : cupsData.cups_gas.CupsGas;
                        contratosMap.set(numCon, {
                            id: idCounter++,
                            NumCon: numCon,
                            label: `Contrato ${numCon}`,
                            tipo: tipoCups,
                            CodCups: CodigoCUPS || '',
                        });
                    }
                }
            });
        });

        return Array.from(contratosMap.values());
    }, [datos]);

    return contratosAsociados;
};
