from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from datetime import datetime, timedelta from typing import Dict, Any import random from app.seismo.database import get_db from app.seismo.services.snapshot import emit_status_snapshot router = APIRouter(prefix="/api", tags=["roster"]) @router.get("/status-snapshot") def get_status_snapshot(db: Session = Depends(get_db)): """ Calls emit_status_snapshot() to get current fleet status. This will be replaced with real Series3 emitter logic later. """ return emit_status_snapshot() @router.get("/roster") def get_roster(db: Session = Depends(get_db)): """ Returns list of units with their metadata and status. Uses mock data for now. """ snapshot = emit_status_snapshot() units_list = [] for unit_id, unit_data in snapshot["units"].items(): units_list.append({ "id": unit_id, "status": unit_data["status"], "age": unit_data["age"], "last_seen": unit_data["last"], "deployed": unit_data["deployed"], "note": unit_data.get("note", ""), "last_file": unit_data.get("fname", "") }) # Sort by status priority (Missing > Pending > OK) then by ID status_priority = {"Missing": 0, "Pending": 1, "OK": 2} units_list.sort(key=lambda x: (status_priority.get(x["status"], 3), x["id"])) return {"units": units_list}