from typing import List, Optional
from pydantic import BaseModel, Field
import uuid
from datetime import datetime

class OrderItemBase(BaseModel):
    product_id: uuid.UUID
    quantity: int = Field(..., gt=0, description="Quantity must be at least 1")

class OrderItemCreate(OrderItemBase):
    pass

class OrderItemResponse(BaseModel):
    id: uuid.UUID
    product_id: uuid.UUID
    quantity: int
    price: float
    
    # Nested info produk minimalis untuk invoice
    class ProductInfo(BaseModel):
        name: str
        material: str
        image_url: Optional[str] = None
        class Config:
            from_attributes = True

    product: Optional[ProductInfo] = None

    class Config:
        from_attributes = True

class OrderCreate(BaseModel):
    customer_name: str = Field(..., min_length=2)
    customer_phone: str = Field(..., description="Active phone number (WhatsApp preferred)")
    shipping_address: str = Field(..., min_length=10, description="Full home address for shipping")
    items: List[OrderItemCreate]

class OrderResponse(BaseModel):
    id: uuid.UUID
    status: str
    total_price: float
    customer_name: str
    customer_phone: str
    shipping_address: str
    whatsapp_link: Optional[str] = None
    created_at: datetime
    items: List[OrderItemResponse]

    class Config:
        from_attributes = True
