import { CupsOption, Localidad } from '../../Interfaces/Interfaces';

/**
 * Busca y retorna la localidad y provincia basándose en el código postal
 */
export const findLocalidadByCodigoPostal = (codigoPostal: string, localidades: Localidad[]) => {
    const localidad = localidades.find(loc => loc.CPLoc === codigoPostal);
    if (localidad) {
        return {
            localidad: localidad.DesLoc,
            provincia: localidad.provincia?.DesPro || ''
        };
    }
    return {
        localidad: '',
        provincia: ''
    };
};

/**
 * Filtra CUPS por código de cliente
 */
export const filterCupsByCliente = (cups: any[], clienteId: number | string) => {
    if (!clienteId || !cups) return cups || [];
    return cups.filter((cup: any) => cup.CodCli === clienteId);
};

/**
 * Obtiene los CUPS ya utilizados en ambas tablas (eléctricos y gas)
 */
export const getCupsUtilizados = (dataElectrico: any[], dataGas: any[]) => {
    const cupsElectricosUtilizados = dataElectrico
        .map(row => row.cups_electrico)
        .filter(cups => cups);

    const cupsGasUtilizados = dataGas
        .map(row => row.cupsGas)
        .filter(cups => cups);

    return [...cupsElectricosUtilizados, ...cupsGasUtilizados];
};

/**
 * Verifica si un CUPS ya está siendo utilizado
 */
export const isCupsUtilizado = (codigoCups: string, todosLosCupsUtilizados: string[]) => {
    return todosLosCupsUtilizados.includes(codigoCups);
};

/**
 * Crea un ID temporal único para una nueva fila
 */
export const createTemporaryId = (tipo: 'electrico' | 'gas') => {
    return `temp_${tipo}_${Date.now()}`;
};

/**
 * Extrae los datos comerciales de una fila (para preservarlos durante actualizaciones)
 */
export const extractDatosComerciales = (row: any) => {
    return {
        comercializadora: row.comercializadora || '',
        comercializadoraNombre: row.comercializadoraNombre || '',
        codigoServicioProducto: row.codigoServicioProducto || '',
        producto: row.producto || '',
        productoNombre: row.productoNombre || '',
        anexo: row.anexo || '',
        anexoNombre: row.anexoNombre || '',
        fechaInicio: row.fechaInicio || '',
        fechaFin: row.fechaFin || '',
        tipoprecio: row.tipoprecio || '',
    };
};

