/**
 * Clasificación de filas de historial alineada con las tablas (badges Exitoso / Error / Desconocido).
 * Solo "Exitoso" cuenta como registro procesado a efectos del resumen del modal.
 */

export type IntegracionRowStatus = 'success' | 'error' | 'unknown';

export function getIntegracionRowStatus(respuesta: unknown): IntegracionRowStatus {
    if (respuesta == null || respuesta === '') return 'unknown';

    const respuestaStr =
        typeof respuesta === 'string'
            ? respuesta.toLowerCase()
            : JSON.stringify(respuesta).toLowerCase();

    if (respuestaStr.includes('error') || respuestaStr.includes('failed')) {
        return 'error';
    }
    if (respuestaStr.includes('success') || respuestaStr.includes('ok') || /\d+/.test(respuestaStr)) {
        return 'success';
    }
    return 'unknown';
}

export function isIntegracionRowProcessed(respuesta: unknown): boolean {
    return getIntegracionRowStatus(respuesta) === 'success';
}

export type OkCommercialRowStatus = 'success' | 'error' | 'warning' | 'unknown';

export function getOkCommercialRowStatus(respuesta: unknown): OkCommercialRowStatus {
    if (respuesta == null || respuesta === '') return 'unknown';

    if (typeof respuesta === 'object' && respuesta !== null && 'success' in respuesta) {
        const s = (respuesta as { success?: boolean }).success;
        if (typeof s === 'boolean' && s === false) {
            return 'error';
        }
    }

    if (typeof respuesta === 'object' && respuesta !== null && 'status_code' in respuesta) {
        const statusCode = Number((respuesta as { status_code?: number }).status_code);
        if (Number.isFinite(statusCode)) {
            if (statusCode >= 200 && statusCode < 300) return 'success';
            if (statusCode >= 400) return 'error';
        }
    }

    const respuestaStr =
        typeof respuesta === 'string'
            ? respuesta.toLowerCase()
            : JSON.stringify(respuesta).toLowerCase();

    if (respuestaStr.includes('error') || respuestaStr.includes('failed')) {
        return 'error';
    }
    if (respuestaStr.includes('success') || respuestaStr.includes('ok')) {
        return 'success';
    }
    return 'warning';
}

export function isOkCommercialRowProcessed(respuesta: unknown): boolean {
    return getOkCommercialRowStatus(respuesta) === 'success';
}
