﻿import { ComercializadoraSips, SipsProviderConfig } from '../types';

export function readServicioIntegracion(comercializadora: ComercializadoraSips | null | undefined): string | null {
    if (!comercializadora) {
        return null;
    }

    return comercializadora.Servicio_Integracion
        ?? comercializadora.servicio_integracion
        ?? null;
}

/**
 * Resuelve el proveedor SIPS ├║nicamente por CodCom de la comercializadora seleccionada.
 * La fuente de verdad es sips_provider embebido en cada registro (desde BD).
 */
export function resolveSipsProvider(
    comercializadora: ComercializadoraSips | null | undefined,
    providersByCodCom: Record<string, SipsProviderConfig> = {}
): SipsProviderConfig | null {
    if (!comercializadora?.CodCom) {
        return null;
    }

    const codCom = Number(comercializadora.CodCom);

    if (comercializadora.sips_provider) {
        return {
            ...comercializadora.sips_provider,
            codCom,
        };
    }

    const fromMap =
        providersByCodCom[codCom]
        ?? providersByCodCom[String(codCom)];

    if (fromMap) {
        return { ...fromMap, codCom };
    }

    const integrationKey = readServicioIntegracion(comercializadora)?.toLowerCase().trim();
    if (integrationKey === 'audax' || integrationKey === 'adx') {
        return {
            codCom,
            key: integrationKey,
            label: integrationKey.toUpperCase(),
            servicioIntegracion: integrationKey,
            tipo_servicio_options:
                integrationKey === 'adx'
                    ? [
                        { value: 'Electricity', label: 'Electricity' },
                        { value: 'Gas', label: 'Gas' },
                    ]
                    : [
                        { value: 'luz', label: 'Luz' },
                        { value: 'gas', label: 'Gas' },
                    ],
        } as SipsProviderConfig;
    }

    return null;
}
