"""
02-scraper-proveedores.py — Extraer una tabla HTML a CSV con BeautifulSoup.

Qué es:      Scraper que lee un archivo HTML local (proveedores.html),
             extrae la tabla de precios y la convierte en CSV + resumen.
Cuándo usarlo: Para practicar scraping sin depender de internet, y como
             base para scrapear cualquier tabla HTML real.
Requisitos:  Python 3.10+, pip install -r requirements.txt, y el archivo
             proveedores.html (descárgalo del mismo kit) en esta carpeta.
Cómo usarlo: python 02-scraper-proveedores.py
             Genera: datos_proveedores.csv
"""

import httpx
from bs4 import BeautifulSoup
import pandas as pd
from pathlib import Path

ruta_html = Path("proveedores.html")

try:
    with open(ruta_html, "r", encoding="utf-8") as archivo:
        html = archivo.read()
except FileNotFoundError:
    print(f"Error: No se encontró el archivo {ruta_html}")
    exit(1)

soup = BeautifulSoup(html, "lxml")

tabla = soup.find("table", id="tabla-precios")
if not tabla:
    print("Error: No se encontró la tabla de precios")
    exit(1)

encabezados = []
for th in tabla.find("tr").find_all("th"):
    encabezados.append(th.text.strip())

datos = []
for fila in tabla.find_all("tr")[1:]:
    columnas = fila.find_all("td")
    if len(columnas) == len(encabezados):
        fila_datos = {
            encabezados[0]: columnas[0].text.strip(),
            encabezados[1]: columnas[1].text.strip(),
            encabezados[2]: float(columnas[2].text.strip()),
            encabezados[3]: int(columnas[3].text.strip()),
            encabezados[4]: int(columnas[4].text.strip()),
        }
        datos.append(fila_datos)

df = pd.DataFrame(datos)

print("=== DATOS EXTRAÍDOS ===")
print(df.to_string(index=False))

print("\n=== RESUMEN ===")
print(f"Total de registros: {len(df)}")
print(f"Proveedores únicos: {df['Proveedor'].nunique()}")
print(f"Materiales únicos: {df['Material'].nunique()}")
print(f"Precio promedio: ${df['Precio Unitario (USD)'].mean():.2f}")
print(f"Stock total: {df['Stock (unidades)'].sum():,}")

archivo_salida = "datos_proveedores.csv"
df.to_csv(archivo_salida, index=False)
print(f"\n✅ Datos guardados en: {archivo_salida}")
