from pydantic import BaseModel
from typing import Optional, Dict, List, Any


class HealthResponse(BaseModel):
    status: str
    version: str = ""
    last_updated: Optional[str] = None
    sources: Dict[str, int]
    freshness: Dict[str, str]
    uptime_seconds: int
    # SLO status block — per-source red/yellow/green derived from the
    # SLO registry. Keys are source names, values are status dicts
    # ({status, age_s, row_count, slo, stale, empty, description}).
    slo: Optional[Dict[str, Any]] = None
    slo_summary: Optional[Dict[str, int]] = None
    # Issue #258: AIS proxy status — currently exposes ``degraded_tls``
    # (bool), true when ais_proxy.js fell back to the SPKI-pinned
    # insecure-date path because the upstream Let's Encrypt cert is
    # expired. Empty dict / null means no status reported yet.
    ais_proxy: Optional[Dict[str, Any]] = None


class RefreshResponse(BaseModel):
    status: str


class AisFeedResponse(BaseModel):
    status: str
    ingested: int = 0


class RouteResponse(BaseModel):
    orig_loc: Optional[list] = None
    dest_loc: Optional[list] = None
    origin_name: Optional[str] = None
    dest_name: Optional[str] = None
