# main.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import json, asyncio, os
from datetime import datetime

app = FastAPI(title="EcoTrack Simulador")

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"],
)

# Carga el JSON de rutas
with open("rutas.json", "r", encoding="utf-8") as f:
    RUTAS = json.load(f)

# Estado actual del simulador en memoria
estado = {}
for ruta in RUTAS:
    estado[ruta["routeId"]] = {
        "routeId":    ruta["routeId"],
        "name":       ruta["name"],
        "truckId":    ruta["truckId"],
        "status":     ruta["status"],
        "posicionActual": 1,
        "totalNodos": len(ruta["positions"])
    }

@app.get("/rutas")
def get_rutas():
    return list(estado.values())

@app.get("/rutas/{route_id}")
def get_ruta(route_id: str):
    return estado.get(route_id, {"error": "Ruta no encontrada"})

@app.get("/")
def root():
    return {"mensaje": "Simulador EcoTrack corriendo", "hora": datetime.now().isoformat()}

# Simulador — avanza posicionActual cada 90 segundos
async def simular():
    while True:
        await asyncio.sleep(10)
        for route_id in estado:
            pos = estado[route_id]["posicionActual"]
            total = estado[route_id]["totalNodos"]
            if pos < total:
                estado[route_id]["posicionActual"] += 1
            else:
                # Reinicia la ruta al terminar
                estado[route_id]["posicionActual"] = 1
        print(f"[{datetime.now().strftime('%H:%M:%S')}] Camiones avanzaron un nodo")

@app.on_event("startup")
async def startup():
    asyncio.create_task(simular())