"""Stable normalized contract. Provider payloads must be converted here, never used elsewhere."""
from dataclasses import dataclass
from datetime import datetime
from typing import Protocol


@dataclass(frozen=True)
class Quote:
    source: str
    symbol: str
    observed_at: datetime
    ltp: float
    open: float | None = None
    high: float | None = None
    low: float | None = None
    close: float | None = None
    volume: float | None = None
    open_interest: float | None = None
    raw: dict | None = None


class QuoteSource(Protocol):
    def latest(self, symbol: str) -> Quote: ...
