from pydantic import BaseModel, ConfigDict
from typing import Optional, List


class ProductBase(BaseModel):
    sku: Optional[str] = None
    name: str
    description: Optional[str] = None
    category: Optional[str] = None
    base_price: Optional[float] = None
    active: Optional[bool] = True


class ProductCreate(ProductBase):
    pass


class ProductUpdate(BaseModel):
    sku: Optional[str] = None
    name: Optional[str] = None
    description: Optional[str] = None
    category: Optional[str] = None
    base_price: Optional[float] = None
    active: Optional[bool] = None


class ProductOut(ProductBase):
    id: int
    model_config = ConfigDict(from_attributes=True)


# Variants
class ProductVariantBase(BaseModel):
    name: Optional[str] = None
    canvas_width_mm: Optional[float] = None
    canvas_height_mm: Optional[float] = None
    dpi_recommended: Optional[int] = None
    blank_item_sku: Optional[str] = None


class ProductVariantCreate(ProductVariantBase):
    product_id: int


class ProductVariantUpdate(ProductVariantBase):
    pass


class ProductVariantOut(ProductVariantBase):
    id: int
    product_id: int
    model_config = ConfigDict(from_attributes=True)
