from __future__ import annotations
from typing import Optional, Literal
from pydantic import BaseModel, Field


class StockStatusIn(BaseModel):
    name: str = Field(..., max_length=50)
    name_en: Optional[str] = Field(None, max_length=50)
    slug: str = Field(..., max_length=30, pattern=r"^[a-z][a-z0-9_]*$")
    allow_purchase: bool = True
    badge_color: Optional[str] = Field(None, max_length=20)
    badge_text: Optional[str] = Field(None, max_length=50)
    badge_text_en: Optional[str] = Field(None, max_length=50)
    sort_order: int = 0
    is_default: bool = False
    status_type: Literal["in_stock", "out_of_stock"] = "in_stock"
    is_type_default: bool = False


class StockStatusUpdate(BaseModel):
    name: Optional[str] = Field(None, max_length=50)
    name_en: Optional[str] = Field(None, max_length=50)
    slug: Optional[str] = Field(None, max_length=30, pattern=r"^[a-z][a-z0-9_]*$")
    allow_purchase: Optional[bool] = None
    badge_color: Optional[str] = Field(None, max_length=20)
    badge_text: Optional[str] = Field(None, max_length=50)
    badge_text_en: Optional[str] = Field(None, max_length=50)
    sort_order: Optional[int] = None
    is_default: Optional[bool] = None
    status_type: Optional[Literal["in_stock", "out_of_stock"]] = None
    is_type_default: Optional[bool] = None


class StockStatusOut(BaseModel):
    id: int
    name: str
    name_en: Optional[str] = None
    slug: str
    allow_purchase: bool
    badge_color: Optional[str] = None
    badge_text: Optional[str] = None
    badge_text_en: Optional[str] = None
    sort_order: int = 0
    is_default: bool = False
    is_system: bool = False
    status_type: str = "in_stock"
    is_type_default: bool = False

    model_config = {"from_attributes": True}
