from fastapi import FastAPI
from fastapi.responses import JSONResponse
import requests
from bs4 import BeautifulSoup
import os
import html

SOURCE_URL = "https://aeropuertocuenca.ec/itinerarios/view/salidasarribos.v5.php"

app = FastAPI(
    title="API Itinerarios Aeropuerto Cuenca",
    description="API scrappea vuelos desde el aeropuerto de Cuenca con ruta, fecha, hora, aerolínea y estado.",
    version="1.1.0",
)

def obtener_html_fuente():
    resp = requests.get(SOURCE_URL, timeout=10)
    resp.raise_for_status()
    return resp.text

def extraer_nombre_desde_img(img_src: str) -> str:
    """
    Recibe algo como '../../../itinerarios/img/avianca.png'
    Devuelve 'Avianca'
    """
    nombre = os.path.basename(img_src).replace(".png", "").replace(".jpg", "").replace(".jpeg", "")
    return nombre.capitalize()

def parsear_tabla_vuelos(html_content: str):
    soup = BeautifulSoup(html_content, "html.parser")
    tablas = soup.find_all("table")

    if len(tablas) < 2:
        raise ValueError("No se encontraron tablas de salidas/arribos.")

    tabla_salidas = tablas[0]
    tabla_arribos = tablas[1]

    def parse_tabla(tabla, tipo):
        vuelos = []
        for i, fila in enumerate(tabla.find_all("tr")):
            if i == 0:
                continue

            tds = fila.find_all("td")
            if len(tds) < 6:
                continue

            # Buscar <img> dentro de la columna de aerolínea
            img = tds[3].find("img")
            if img and img.get("src"):
                aerolinea = extraer_nombre_desde_img(img["src"])
            else:
                aerolinea = tds[3].get_text(strip=True)

            vuelos.append({
                "tipo": tipo,
                "ruta": html.unescape(tds[0].get_text(strip=True)),
                "fecha": html.unescape(tds[1].get_text(strip=True)),
                "hora": html.unescape(tds[2].get_text(strip=True)),
                "aerolinea": html.unescape(aerolinea),
                "vuelo": html.unescape(tds[4].get_text(strip=True)),
                "estado": html.unescape(tds[5].get_text(strip=True)).replace("/", "-"),
            })
        return vuelos

    return parse_tabla(tabla_salidas,"SALIDA"), parse_tabla(tabla_arribos,"ARRIBO")


@app.get("/api/cuenca-vuelos")
def api():
    try:
        html_content = obtener_html_fuente()
        salidas, arribos = parsear_tabla_vuelos(html_content)

        return JSONResponse({
            "fuente": SOURCE_URL,
            "salidas": salidas,
            "arribos": arribos,
            "total_salidas": len(salidas),
            "total_arribos": len(arribos),
        })
    except Exception as e:
        return JSONResponse(status_code=500, content={ "error": str(e) })
