import Swal from 'sweetalert2';

export interface ComercialCanalValues {
    comercial: string;
    canal: string;
}

function readStored(): ComercialCanalValues {
    try {
        return {
            comercial: localStorage.getItem('eneon_comercial') || '',
            canal: localStorage.getItem('eneon_canal') || '',
        };
    } catch {
        return { comercial: '', canal: '' };
    }
}

function persist(values: ComercialCanalValues): void {
    try {
        localStorage.setItem('eneon_comercial', values.comercial);
        localStorage.setItem('eneon_canal', values.canal);
    } catch {
        // localStorage no disponible
    }
}

/**
 * Mismo modal que "Tramitar Contrato" (Canal + Comercial). Devuelve null si el usuario cancela.
 */
export async function promptComercialCanal(
    defaults?: Partial<ComercialCanalValues>,
): Promise<ComercialCanalValues | null> {
    const stored = readStored();
    const currentCanal = defaults?.canal ?? stored.canal;
    const currentComercial = defaults?.comercial ?? stored.comercial;

    const result = await Swal.fire({
        title: 'Indica Canal y Comercial',
        html:
            `<input id="swal-canal" class="swal2-input" placeholder="Canal" value="${currentCanal}">` +
            `<input id="swal-comercial" class="swal2-input" placeholder="Comercial" value="${currentComercial}">`,
        focusConfirm: false,
        showCancelButton: true,
        confirmButtonText: 'Continuar',
        preConfirm: () => {
            const c = (document.getElementById('swal-comercial') as HTMLInputElement)?.value || '';
            const ca = (document.getElementById('swal-canal') as HTMLInputElement)?.value || '';
            if (!c.trim() || !ca.trim()) {
                Swal.showValidationMessage('Ambos campos son obligatorios');
                return null;
            }
            return { comercial: c.trim(), canal: ca.trim() };
        },
    });

    if (result.isConfirmed && result.value) {
        const values = result.value as ComercialCanalValues;
        persist(values);
        return values;
    }

    return null;
}
