# -*- coding: utf-8 -*-
"""
Script para validar que todas las columnas críticas estén presentes
Se ejecuta así: python validar_columnas.py <ruta_archivo>
"""
import sys
import json
from config import COLUMNAS_CRITICAS
from utils import obtener_columnas_excel, retornar_error, retornar_respuesta, normalizar_string, encontrar_columna_similar

def validar_columnas(ruta_archivo):
    """
    Valida que todas las columnas críticas estén presentes.
    Retorna: {"valido": True/False, "faltantes": [...], "mapeos_sugeridos": {...}}
    """
    try:
        columnas = obtener_columnas_excel(ruta_archivo)

        if not columnas:
            retornar_error("El archivo no tiene columnas")
            return

        # Normalizar columnas disponibles
        columnas_norm_map = {normalizar_string(col): col for col in columnas}

        # Validar cada columna crítica
        mapeos_sugeridos = {}
        faltantes = []

        for col_critica in COLUMNAS_CRITICAS:
            col_critica_norm = normalizar_string(col_critica)

            # Buscar coincidencia exacta
            coincidencia_exacta = None
            for col_norm, col_original in columnas_norm_map.items():
                if col_norm == col_critica_norm:
                    coincidencia_exacta = col_original
                    break

            if coincidencia_exacta:
                mapeos_sugeridos[col_critica] = coincidencia_exacta
            else:
                # Buscar coincidencia similar
                coincidencia_similar = encontrar_columna_similar(col_critica, columnas, umbral_similitud=0.7)

                if coincidencia_similar:
                    mapeos_sugeridos[col_critica] = coincidencia_similar
                else:
                    faltantes.append(col_critica)

        valido = len(faltantes) == 0

        retornar_respuesta(True, {
            "valido": valido,
            "columnas_faltantes": faltantes,
            "mapeos_sugeridos": mapeos_sugeridos,
            "total_criticas": len(COLUMNAS_CRITICAS),
            "criticas_presentes": len(COLUMNAS_CRITICAS) - len(faltantes),
        })

    except Exception as e:
        retornar_error(str(e))

if __name__ == "__main__":
    if len(sys.argv) < 2:
        retornar_error("Uso: python validar_columnas.py <ruta_archivo>")

    ruta = sys.argv[1]
    validar_columnas(ruta)
