#!/usr/bin/env python3
"""
Descarga boletines de Buenos Aires.

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

import sys
import urllib.parse
from pathlib import Path

import requests
from bs4 import BeautifulSoup

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


class DescargadorBA(BaseDescargador):
    NOMBRE = "BUENOS AIRES"
    DIRECTORIO = "pendientes/buenosaires"

    def descargar_fecha(self, fecha, directorio):
        URL = "https://boletinoficial.gba.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",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
            "Accept-Language": "es-ES,es;q=0.9,en;q=0.8",
        }

        fecha_str = urllib.parse.quote(fecha.strftime("%d/%m/%Y"), safe="")
        url_busqueda = (
            f"{URL}/buscar?search%5Bdate_gteq%5D={fecha_str}"
            f"&search%5Bdate_lteq%5D={fecha_str}"
            f"&search%5Bsection%5D=OFICIAL&search%5Bwords%5D="
            f"&search%5Bsort%5D=by_match_desc&commit=Buscar"
        )

        try:
            response = session.get(url_busqueda, headers=headers, timeout=30)
            response.raise_for_status()
        except requests.exceptions.RequestException as e:
            print(f"  Error al cargar la página de búsqueda: {e}")
            return 'error_descarga'

        soup = BeautifulSoup(response.text, "html.parser")
        result_box = soup.find("div", class_="result-box")
        if not result_box:
            print(f"  No se encontró boletín para esta fecha")
            return 'no_disponible'

        download_link = result_box.find("a", title="Descargar PDF")
        if not download_link or "href" not in download_link.attrs:
            print(f"  No se encontró el enlace de descarga")
            return 'no_disponible'

        pdf_url = URL + download_link["href"]

        try:
            resp_pdf = session.get(pdf_url, headers=headers, timeout=60)
            resp_pdf.raise_for_status()
        except requests.exceptions.RequestException as e:
            print(f"  Error al descargar el PDF: {e}")
            return 'error_descarga'

        try:
            import os
            archivo_path = os.path.join(directorio, self.nombre_archivo(fecha))
            with open(archivo_path, "wb") as f:
                f.write(resp_pdf.content)
            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:
        DescargadorBA().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)
