"""
04-monitoreo-proveedores.py — Monitoreo cíclico de precios con histórico CSV.

Qué es:      Pipeline de monitoreo: consulta varias fuentes, arma una tabla
             comparativa, detecta el mejor precio y acumula histórico en CSV.
Cuándo usarlo: Como esqueleto de un monitor de precios/competencia real.
             Prográmalo con cron (Linux/Mac) o el Programador de tareas
             (Windows) para que corra cada N horas.
Requisitos:  Python 3.10+, pip install -r requirements.txt
Cómo usarlo: python 04-monitoreo-proveedores.py
             Genera/actualiza: historico_precios.csv
Nota:        Las URLs apuntan a una API de práctica (jsonplaceholder) y los
             precios se SIMULAN para la demo. Para usarlo en serio, reemplaza
             la lista `proveedores` con tus APIs/páginas reales y extrae el
             precio del campo correspondiente.
"""

import httpx
import pandas as pd
from datetime import datetime

proveedores = [
    {"nombre": "ACME Corp", "url": "https://jsonplaceholder.typicode.com/posts/1"},
    {"nombre": "Industrial Parts", "url": "https://jsonplaceholder.typicode.com/posts/2"},
    {"nombre": "QualiParts Inc", "url": "https://jsonplaceholder.typicode.com/posts/3"},
    {"nombre": "Global Logistics", "url": "https://jsonplaceholder.typicode.com/posts/4"},
]

resultados = []

for proveedor in proveedores:
    try:
        respuesta = httpx.get(proveedor["url"], timeout=15.0)
        respuesta.raise_for_status()
        data = respuesta.json()

        resultados.append({
            "proveedor": proveedor["nombre"],
            "material": "Rodamiento SKF 6205",
            "precio_unitario": round(abs(hash(data["title"])) % 20 + 5, 2),
            "stock": int(abs(hash(data["body"])) % 5000 + 100),
            "fecha_consulta": datetime.now().strftime("%Y-%m-%d %H:%M"),
            "estado": "OK",
        })
    except httpx.RequestError as e:
        resultados.append({
            "proveedor": proveedor["nombre"],
            "material": "Rodamiento SKF 6205",
            "precio_unitario": 0,
            "stock": 0,
            "fecha_consulta": datetime.now().strftime("%Y-%m-%d %H:%M"),
            "estado": f"Error: {e}",
        })
    except httpx.HTTPStatusError as e:
        resultados.append({
            "proveedor": proveedor["nombre"],
            "material": "Rodamiento SKF 6205",
            "precio_unitario": 0,
            "stock": 0,
            "fecha_consulta": datetime.now().strftime("%Y-%m-%d %H:%M"),
            "estado": f"HTTP {e.response.status_code}",
        })

df = pd.DataFrame(resultados)

print("=== MONITOREO DE PROVEEDORES ===")
print(df.to_string(index=False))

if df[df["estado"] == "OK"].empty:
    print("\n⚠️  Todos los proveedores fallaron. Revisa conexiones.")
else:
    mejor = df.loc[df["precio_unitario"].idxmin()]
    print(f"\n🏆 Mejor precio: {mejor['proveedor']} — ${mejor['precio_unitario']:.2f}")
    print(f"   Stock disponible: {mejor['stock']:,} unidades")

try:
    historico = pd.read_csv("historico_precios.csv")
    df_completo = pd.concat([historico, df], ignore_index=True)
except FileNotFoundError:
    df_completo = df

df_completo.to_csv("historico_precios.csv", index=False)
print(f"\n✅ Historial actualizado: {len(df_completo)} registros totales")
