from typing import Optional, List
from pydantic import BaseModel, Field
import uuid
from datetime import datetime
from app.schemas.category import CategoryResponse

class ProductBase(BaseModel):
    name: str
    description: Optional[str] = None
    price: float = Field(..., gt=0, description="Price must be greater than 0")
    stock: int = Field(..., ge=0, description="Stock cannot be negative")
    material: str = Field(..., description="Material must be 'titanium' or 'xuping'")
    category_id: uuid.UUID

class ProductCreate(ProductBase):
    pass

class ProductUpdate(BaseModel):
    name: Optional[str] = None
    description: Optional[str] = None
    price: Optional[float] = Field(None, gt=0)
    stock: Optional[int] = Field(None, ge=0)
    material: Optional[str] = None
    category_id: Optional[uuid.UUID] = None
    image_url: Optional[str] = None

class ProductResponse(ProductBase):
    id: uuid.UUID
    slug: str
    image_url: Optional[str] = None
    created_at: datetime
    updated_at: datetime
    category: Optional[CategoryResponse] = None

    class Config:
        from_attributes = True

class ProductListResponse(BaseModel):
    """Schema wrapping standard pagination responses."""
    success: bool = True
    data: List[ProductResponse]
    total: int
    skip: int
    limit: int
