"""
Descarga los días faltantes de una provincia leyendo el Excel de análisis.
Delega la descarga al script correspondiente de cada provincia.

Uso:
    python descargar_faltantes.py --provincia "RIO NEGRO"
    python descargar_faltantes.py --provincia "SALTA"
"""

import argparse
import json
import subprocess
import sys
import pandas as pd
from pathlib import Path

EXCEL       = "analisis_faltantes.xlsx"
SCHEDULE    = Path(__file__).parent / "schedule.json"
SCRIPTS_DIR = Path(__file__).parent / "procesamiento/descarga_pdf/scripts_descarga_boletines"

# Cargar schedule
with open(SCHEDULE) as f:
    schedule = json.load(f)

# Mapa: nombre de hoja Excel → {script, carpeta}
# La hoja Excel usa el nombre de carpeta en mayúsculas con espacios
PROVINCIAS = {
    entry["carpeta"].upper().replace("_", " "): entry
    for entry in schedule["provincias"]
}

parser = argparse.ArgumentParser()
parser.add_argument("--provincia", required=True, help='Nombre de la provincia, ej: "RIO NEGRO"')
args = parser.parse_args()

hoja = args.provincia.upper().strip()

if hoja not in PROVINCIAS:
    print(f"Provincia '{hoja}' no encontrada. Opciones:")
    for p in sorted(PROVINCIAS):
        print(f"  {p}")
    sys.exit(1)

entry      = PROVINCIAS[hoja]
script     = SCRIPTS_DIR / entry["script"]
directorio = str(Path(__file__).parent / "files/boletines" / entry["carpeta"] / "sin_procesar")

if not script.exists():
    print(f"Script no encontrado: {script}")
    sys.exit(1)

try:
    df = pd.read_excel(EXCEL, sheet_name=hoja)
except Exception as e:
    print(f"No se pudo leer la hoja '{hoja}' del Excel: {e}")
    sys.exit(1)

total = len(df)
print(f"Provincia:  {hoja}")
print(f"Script:     {script.name}")
print(f"Directorio: {directorio}")
print(f"Faltantes:  {total}\n")

errores = []
for i, row in enumerate(df.itertuples(), 1):
    fecha = pd.to_datetime(row.Fecha, dayfirst=True)
    print(f"[{i}/{total}] {fecha.date()}")
    result = subprocess.run([
        sys.executable, str(script),
        "--anio",       str(fecha.year),
        "--mes",        str(fecha.month),
        "--dia",        str(fecha.day),
        "--directorio", directorio,
    ])
    if result.returncode != 0:
        errores.append(str(fecha.date()))

print(f"\nCompletado: {total - len(errores)}/{total} OK")
if errores:
    print(f"Con errores: {', '.join(errores)}")
