from pydantic import Field, BaseModel
from typing import Optional, List
from enum import Enum


class OGID(str, Enum):
    """Доступные идентификаторы ОГ"""
    KNPZ = "KNPZ"
    ANHK = "ANHK"
    AchNPZ = "AchNPZ"
    BASH = "BASH"
    UNPZ = "UNPZ"
    UNH = "UNH"
    NOV = "NOV"
    NovKuybNPZ = "NovKuybNPZ"
    KuybNPZ = "KuybNPZ"
    CyzNPZ = "CyzNPZ"
    TuapsNPZ = "TuapsNPZ"
    SNPZ = "SNPZ"
    RNPK = "RNPK"
    NVNPO = "NVNPO"
    KLNPZ = "KLNPZ"
    PurNP = "PurNP"
    YANOS = "YANOS"


class SvodkaPMSingleOGRequest(BaseModel):
    id: OGID = Field(
        ...,
        description="Идентификатор МА для запрашиваемого ОГ",
        example="SNPZ"
    )

    codes: List[int] = Field(
        ...,
        description="Массив кодов выбираемых строк",
        example=[78, 79],
        min_items=1
    )

    columns: List[str] = Field(
        ...,
        description="Массив названий выбираемых столбцов",
        example=["ПП", "СЭБ"],
        min_items=1
    )

    search: Optional[str] = Field(
        None,
        description="Опциональный параметр для фильтрации ('Итого' или null)",
        example="Итого"
    )

    class Config:
        json_schema_extra = {
            "example": {
                "id": "SNPZ",
                "codes": [78, 79],
                "columns": ["ПП", "СЭБ"]
            }
        }


class SvodkaPMTotalOGsRequest(BaseModel):
    codes: List[int] = Field(
        ...,
        description="Массив кодов выбираемых строк",
        example=[78, 79, 394, 395, 396, 397, 81, 82, 83, 84],
        min_items=1
    )

    columns: List[str] = Field(
        ...,
        description="Массив названий выбираемых столбцов",
        example=["БП", "ПП", "СЭБ"],
        min_items=1
    )

    search: Optional[str] = Field(
        None,
        description="Опциональный параметр для фильтрации ('Итого' или null)",
        example="Итого"
    )

    class Config:
        json_schema_extra = {
            "example": {
                "codes": [78, 79, 394, 395, 396, 397, 81, 82, 83, 84],
                "columns": ["БП", "ПП", "СЭБ"]
            }
        }
