import { formatToYYYYMMDD } from '../../Utils';

export interface VentanaOption {
    TarifaCUPS: string;
    FechaInicioPoliza: string;
    FechaFinalPoliza: string;
    provider?: 'audax' | 'adx';
    nombre?: string;
    productCode?: string;
    version?: string;
    suministro?: string;
    gama?: string;
    tipoContrato?: string;
    tarifa?: string;
    subtarifa?: string;
    certVerde?: string;
    atr?: string | null;
    ventanaInicio?: string | null;
    ventanaFin?: string | null;
    PrecioE1?: number;
    PrecioE2?: number;
    PrecioE3?: number;
    PrecioE4?: number;
    PrecioE5?: number;
    PrecioE6?: number;
    PrecioP1?: number;
    PrecioP2?: number;
    PrecioP3?: number;
    PrecioP4?: number;
    PrecioP5?: number;
    PrecioP6?: number;
    GdO?: string;
    nombretarifa?: string;
    [key: string]: unknown;
}

export interface VentanaSeleccion {
    Id_Tarifa_Automatica: string;
    fechaInicio: string;
    fechaFin: string;
    actualizarFechas: boolean;
    nombretarifa?: string;
    productCode?: string;
    version?: string;
}

/** Construye el patch de fila a partir de la ventana seleccionada */
export function buildVentanaRowPatch(
    selection: VentanaSeleccion,
    options?: { editionMode?: boolean },
): Record<string, string> {
    const patch: Record<string, string> = {
        Id_Tarifa_Automatica: selection.Id_Tarifa_Automatica,
        nombretarifa: selection.nombretarifa ?? selection.Id_Tarifa_Automatica,
        productCode: selection.productCode ?? '',
        version: selection.version ?? '',
    };

    if (selection.actualizarFechas) {
        const fi = formatToYYYYMMDD(selection.fechaInicio) || selection.fechaInicio;
        const ff = formatToYYYYMMDD(selection.fechaFin) || selection.fechaFin;
        if (options?.editionMode) {
            patch.FecActCUPs = fi;
            patch.FecVenCUPs = ff;
        } else {
            patch.fechaInicio = fi;
            patch.fechaFin = ff;
        }
    }

    return patch;
}

export function ventanaOptionToSelection(
    op: VentanaOption,
    actualizarFechas: boolean,
): VentanaSeleccion {
    const tarifaId = op.TarifaCUPS || op.nombre || '';
    return {
        Id_Tarifa_Automatica: tarifaId,
        fechaInicio: op.FechaInicioPoliza || op.ventanaInicio || '',
        fechaFin: op.FechaFinalPoliza || op.ventanaFin || '',
        actualizarFechas,
        nombretarifa: op.nombretarifa || op.nombre || tarifaId,
        productCode: op.productCode || '',
        version: op.version || '',
    };
}

export function isAdxVentanaProvider(
    provider?: string,
    servicioIntegracion?: string | null,
): boolean {
    return provider === 'adx' || servicioIntegracion?.toLowerCase() === 'adx';
}
