from enum import Enum

from pydantic import BaseModel


class MetricType(str, Enum):
    LastDate = "LastDate"
    LastTime = "LastTime"
    LastPrice = "LastPrice"
    LastVolume = "LastVolume"
    A1Price = "A1Price"
    A2Price = "A2Price"
    A3Price = "A3Price"
    A4Price = "A4Price"
    A5Price = "A5Price"
    A6Price = "A6Price"
    A7Price = "A7Price"
    A8Price = "A8Price"
    A9Price = "A9Price"
    A10Price = "A10Price"
    A1Volume = "A1Volume"
    A2Volume = "A2Volume"
    A3Volume = "A3Volume"
    A4Volume = "A4Volume"
    A5Volume = "A5Volume"
    A6Volume = "A6Volume"
    A7Volume = "A7Volume"
    A8Volume = "A8Volume"
    A9Volume = "A9Volume"
    A10Volume = "A10Volume"
    A1Orders = "A1Orders"
    A2Orders = "A2Orders"
    A3Orders = "A3Orders"
    A4Orders = "A4Orders"
    A5Orders = "A5Orders"
    A6Orders = "A6Orders"
    A7Orders = "A7Orders"
    A8Orders = "A8Orders"
    A9Orders = "A9Orders"
    A10Orders = "A10Orders"
    B1Price = "B1Price"
    B2Price = "B2Price"
    B3Price = "B3Price"
    B4Price = "B4Price"
    B5Price = "B5Price"
    B6Price = "B6Price"
    B7Price = "B7Price"
    B8Price = "B8Price"
    B9Price = "B9Price"
    B10Price = "B10Price"
    B1Volume = "B1Volume"
    B2Volume = "B2Volume"
    B3Volume = "B3Volume"
    B4Volume = "B4Volume"
    B5Volume = "B5Volume"
    B6Volume = "B6Volume"
    B7Volume = "B7Volume"
    B8Volume = "B8Volume"
    B9Volume = "B9Volume"
    B10Volume = "B10Volume"
    B1Orders = "B1Orders"
    B2Orders = "B2Orders"
    B3Orders = "B3Orders"
    B4Orders = "B4Orders"
    B5Orders = "B5Orders"
    B6Orders = "B6Orders"
    B7Orders = "B7Orders"
    B8Orders = "B8Orders"
    B9Orders = "B9Orders"
    B10Orders = "B10Orders"
    BidVolume = "BidVolume"
    BidPrice = "BidPrice"
    AskVolume = "AskVolume"
    AskPrice = "AskPrice"
    OpenPrice = "OpenPrice"
    HighPrice = "HighPrice"
    LowPrice = "LowPrice"
    PreviousClosePrice = "PreviousClosePrice"
    PreviousCloseDate = "PreviousCloseDate"
    CumulativeVolume = "CumulativeVolume"
    FullName = "FullName"
    RelativeDifference = "RelativeDifference"
    AbsoluteDifference = "AbsoluteDifference"


class Metric(BaseModel):
    """Depicts one metric from a specific product: price, volume, ask, bid..."""

    metric_type: MetricType
    product_id: str
    value: str | float
