"""Punto de entrada: lee el Excel y carga cada licencia en el sistema.

Uso:
    python main.py                 # DRY-RUN: rellena y saca captura, NO guarda
    python main.py --send          # Guarda de verdad (clic en Grabar)
    python main.py --headed        # Muestra el navegador
    python main.py --fila 2        # Procesa solo la fila 2 del Excel
    python main.py --send --headed # Combinables
"""
import argparse
import os
import sys
from config import EXCEL_PATH
from excel_reader import leer_licencias
from automation import LicenciaBot, LicenciaError
from remuneraciones import escribir_en_excel, escribir_comentario


def _comentar(excel, fila, texto):
    try:
        escribir_comentario(excel, fila, texto)
    except Exception as e:
        print(f"      (no pude escribir comentario: {e})")


def main():
    ap = argparse.ArgumentParser(description="Ingreso automático de licencias médicas")
    ap.add_argument("--send", action="store_true", help="Guardar de verdad (clic en Grabar)")
    ap.add_argument("--headed", action="store_true", help="Mostrar el navegador")
    ap.add_argument("--fila", type=int, default=None, help="Procesar solo esa fila del Excel")
    ap.add_argument("--excel", default=EXCEL_PATH, help="Ruta al Excel")
    args = ap.parse_args()

    licencias = leer_licencias(args.excel)
    if args.fila is not None:
        licencias = [l for l in licencias if l.get("_fila_excel") == args.fila]
    if not licencias:
        print("No hay licencias para procesar."); sys.exit(1)

    modo = "ENVÍO REAL (se guardará)" if args.send else "DRY-RUN (solo rellena + captura)"
    print(f"== {len(licencias)} licencia(s) | Modo: {modo} ==\n")

    ok, err = 0, 0
    with LicenciaBot(headless=not args.headed, slow_mo=150 if args.headed else 0) as bot:
        bot.login()
        print("Sesión iniciada.\n")
        for lic in licencias:
            fila = lic.get("_fila_excel")
            print(f"-- Fila {fila} | RUT {lic['rut']} | Lic {lic['num_licencia']} ...")
            try:
                r = bot.ingresar_licencia(lic, enviar=args.send)
                ok += 1
                print(f"   OK [{r['modo']}]")
                print(f"      Funcionario : {r['nombre_cargado']}")
                print(f"      N° Licencia : {r['num_licencia']}")
                print(f"      Profesional : {r['profesional']}  (apellidos: {r.get('prof_apellidos','')})")
                print(f"      Reposo      : {r['fecha_inicio']} -> {r['fecha_fin']} ({r['dias']} días, {r['tipo_reposo']})")
                print(f"      Prev./Esp.  : {r['entidad_salud']} / {r['especialidad']}")
                print(f"      Recuperación: {r.get('dias_calculados','')} día(s) calc., valor {r.get('valor_recuperacion','')}")
                if r.get("dialogos"):
                    print(f"      Mensajes    : {r['dialogos']}")
                if r.get("captura"):
                    print(f"      Captura     : {r['captura']}")
                # Cobro SIL + remuneraciones (solo en envío real)
                if r.get("pdf_cobro_sil"):
                    print(f"      Cobro SIL   : {r['pdf_cobro_sil']}")
                    remun = r.get("remuneraciones")
                    if remun and remun.get("meses"):
                        print(f"      Remuner.    : meses {remun['meses']} imponible {remun.get('imponible')}")
                        escribir_en_excel(args.excel, r["fila_excel"], remun,
                                          os.path.basename(r["pdf_cobro_sil"]))
                        print(f"      -> remuneraciones escritas en {args.excel}")
                if r.get("error_cobro_sil"):
                    print(f"      Cobro SIL   : ERROR {r['error_cobro_sil']}")
                # comentario en el Excel
                if not args.send:
                    coment = "Prueba OK (campos válidos, no guardada)"
                elif r.get("pdf_cobro_sil"):
                    coment = "Guardada · Cobro SIL OK"
                elif r.get("enviado"):
                    coment = f"Guardada (sin Cobro SIL: {r.get('error_cobro_sil','')})"
                else:
                    coment = "Revisar: no se confirmó el guardado"
                _comentar(args.excel, fila, coment)
                print()
            except LicenciaError as e:
                err += 1
                print(f"   ERROR: {e}\n")
                _comentar(args.excel, fila, f"ERROR: {e}")
            except Exception as e:
                err += 1
                print(f"   ERROR inesperado: {e}\n")
                _comentar(args.excel, fila, f"ERROR: {e}")

    print(f"== Resumen: {ok} correcta(s), {err} con error ==")


if __name__ == "__main__":
    main()
