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


class ReviewOut(BaseModel):
    id: int
    product_id: int
    customer_id: Optional[int] = None
    customer_name: str
    rating: int
    content: str
    images: Optional[list[str]] = []
    variant: Optional[str] = None
    status: str
    merchant_reply: Optional[str] = None
    is_verified_purchase: bool = False
    helpful_count: int = 0
    product_name: Optional[str] = None  # admin use only
    created_at: Optional[datetime] = None

    model_config = {"from_attributes": True}


class ReviewReply(BaseModel):
    merchant_reply: str = Field(..., min_length=1, max_length=500)


class ReviewStatusUpdate(BaseModel):
    status: str = Field(..., pattern="^(pending|approved|hidden)$")