from datetime import date as date_type
from datetime import datetime

from sqlalchemy import Date, DateTime, Float, String, Text
from sqlalchemy.orm import Mapped, mapped_column

from app.database import Base


class RegimeSnapshot(Base):
    """Daily point-in-time snapshot of the AI/Tech Risk Monitor.

    One row per calendar date (unique). ``breakdown_json`` holds the full
    ``breakdown_json`` is authoritative for v2 State, Warning, source dates,
    coverage, and fixed-basket metadata. ``total_score``/``band`` retain the v2
    State reading for schema compatibility. Nothing reads this to gate trades.
    """

    __tablename__ = "regime_snapshots"

    id: Mapped[int] = mapped_column(primary_key=True)
    date: Mapped[date_type] = mapped_column(Date, nullable=False, unique=True, index=True)
    total_score: Mapped[float] = mapped_column(Float, nullable=False)
    band: Mapped[str] = mapped_column(String(20), nullable=False)
    breakdown_json: Mapped[str] = mapped_column(Text, nullable=False)
    created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False)
