#!/usr/bin/env python3
"""
Descarga boletines de BORA (sección segunda).

Uso:
    python descargar_bora.py
    python descargar_bora.py --anio 2024
    python descargar_bora.py --anio 2024 --mes 5
    python descargar_bora.py --anio 2024 --mes 5 --dia 15
"""

import base64
import sys
from pathlib import Path

import requests

sys.path.insert(0, str(Path(__file__).resolve().parent))
from base import BaseDescargador


class DescargadorBora(BaseDescargador):
    NOMBRE = "BORA"
    DIRECTORIO = "/var/www/html/compartido/bora"

    def descargar_fecha(self, fecha, directorio):
        URL = "https://www.boletinoficial.gob.ar"
        session = requests.Session()
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
            "Referer": "https://www.boletinoficial.gob.ar/seccion/segunda",
        }

        try:
            resp = session.get(
                f"{URL}/edicion/actualizar/{fecha.strftime('%d-%m-%Y')}",
                headers=headers, timeout=30,
            )
            if resp.status_code != 200:
                print(f"  Error al actualizar fecha: {resp.status_code}")
                return 'error_descarga'
        except requests.exceptions.RequestException as e:
            print(f"  Error de conexión al actualizar fecha: {e}")
            return 'error_descarga'

        try:
            resp = session.post(
                f"{URL}/pdf/download_section",
                headers=headers, data={"nombreSeccion": "segunda"}, timeout=60,
            )
            if resp.status_code != 200:
                print(f"  Error en la petición de descarga: {resp.status_code}")
                return 'error_descarga'
        except requests.exceptions.RequestException as e:
            print(f"  Error de conexión en la descarga: {e}")
            return 'error_descarga'

        try:
            json_data = resp.json()
        except Exception as e:
            print(f"  Error al parsear el JSON: {e}")
            return 'error_descarga'

        if not json_data.get("pdfBase64"):
            print(f"  No se encontró boletín para esta fecha")
            return 'no_disponible'

        try:
            import os
            pdf_bytes = base64.b64decode(json_data["pdfBase64"])
            archivo_path = os.path.join(directorio, self.nombre_archivo(fecha))
            with open(archivo_path, "wb") as f:
                f.write(pdf_bytes)
            print(f"  Descargado: {archivo_path}")
            return 'ok'
        except Exception as e:
            print(f"  Error al guardar el PDF: {e}")
            return 'error_descarga'


if __name__ == "__main__":
    try:
        DescargadorBora().run()
    except KeyboardInterrupt:
        print("\n\nDescarga interrumpida por el usuario")
        sys.exit(130)
    except Exception as e:
        print(f"\nError inesperado: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)
