"""Pydantic schemas for watchlist endpoints."""

from __future__ import annotations

from datetime import date, datetime
from typing import Literal

from pydantic import BaseModel, Field


class SRLevelSummary(BaseModel):
    """Compact SR level for watchlist entry."""

    price_level: float
    type: Literal["support", "resistance"]
    strength: int = Field(ge=0, le=100)


class DimensionScoreSummary(BaseModel):
    """Compact dimension score for watchlist entry."""

    dimension: str
    score: float


class WatchlistEntryResponse(BaseModel):
    """A single watchlist entry with enriched data."""

    symbol: str
    entry_type: Literal["auto", "manual"]
    composite_score: float | None = None
    dimensions: list[DimensionScoreSummary] = []
    rr_ratio: float | None = None
    rr_direction: str | None = None
    momentum_percentile: float | None = None
    sr_levels: list[SRLevelSummary] = []
    last_close: float | None = None
    change_pct: float | None = None
    price_date: date | None = None
    added_at: datetime
