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

class ProductOut(BaseModel):
    id: int
    retailer_name: str
    retailer_brand: str = ""
    store_location: str = ""
    product_id: str = ""
    retailer_product_code: str = ""
    product_name: str
    brand: str = ""
    category_level_1: str = ""
    category_level_2: str = ""
    category_level_3: str = ""
    pack_size: str = ""
    unit_of_measure: str = ""
    price: Optional[float] = None
    promo_price: Optional[float] = None
    promotion_text: str = ""
    barcode_or_gtin: str = ""
    barcode_source: str = "not publicly available"
    image_url: str = ""
    product_url: str = ""
    availability_status: str = "unknown"
    source_type: str = "manual_import"
    source_url: str = ""
    date_captured: datetime
    confidence_score: float = 1.0

    class Config:
        from_attributes = True

class RetailerOut(BaseModel):
    id: int
    name: str
    brand: str = ""
    base_url: str = ""
    connector_type: str
    compliance_status: str
    rate_limit_seconds: int
    enabled: bool
    last_run_status: str
    last_run_at: Optional[datetime] = None
    notes: str = ""

    class Config:
        from_attributes = True

class RetailerPatch(BaseModel):
    connector_type: Optional[str] = None
    compliance_status: Optional[str] = None
    rate_limit_seconds: Optional[int] = Field(default=None, ge=1, le=3600)
    enabled: Optional[bool] = None
    notes: Optional[str] = None

class PublicPageRequest(BaseModel):
    retailer_name: str
    url: str
