# models/schema/vendor_theme.py """ Pydantic schemas for vendor theme operations. """ from typing import Dict, Optional, List from pydantic import BaseModel, Field class VendorThemeColors(BaseModel): """Color scheme for vendor theme.""" primary: Optional[str] = Field(None, description="Primary brand color") secondary: Optional[str] = Field(None, description="Secondary color") accent: Optional[str] = Field(None, description="Accent/CTA color") background: Optional[str] = Field(None, description="Background color") text: Optional[str] = Field(None, description="Text color") border: Optional[str] = Field(None, description="Border color") class VendorThemeFonts(BaseModel): """Typography settings for vendor theme.""" heading: Optional[str] = Field(None, description="Font for headings") body: Optional[str] = Field(None, description="Font for body text") class VendorThemeBranding(BaseModel): """Branding assets for vendor theme.""" logo: Optional[str] = Field(None, description="Logo URL") logo_dark: Optional[str] = Field(None, description="Dark mode logo URL") favicon: Optional[str] = Field(None, description="Favicon URL") banner: Optional[str] = Field(None, description="Banner image URL") class VendorThemeLayout(BaseModel): """Layout settings for vendor theme.""" style: Optional[str] = Field(None, description="Product layout style (grid, list, masonry)") header: Optional[str] = Field(None, description="Header style (fixed, static, transparent)") product_card: Optional[str] = Field(None, description="Product card style (modern, classic, minimal)") class VendorThemeUpdate(BaseModel): """Schema for updating vendor theme (partial updates allowed).""" theme_name: Optional[str] = Field(None, description="Theme preset name") colors: Optional[Dict[str, str]] = Field(None, description="Color scheme") fonts: Optional[Dict[str, str]] = Field(None, description="Font settings") branding: Optional[Dict[str, Optional[str]]] = Field(None, description="Branding assets") layout: Optional[Dict[str, str]] = Field(None, description="Layout settings") custom_css: Optional[str] = Field(None, description="Custom CSS rules") social_links: Optional[Dict[str, str]] = Field(None, description="Social media links") class VendorThemeResponse(BaseModel): """Schema for vendor theme response.""" theme_name: str = Field(..., description="Theme name") colors: Dict[str, str] = Field(..., description="Color scheme") fonts: Dict[str, str] = Field(..., description="Font settings") branding: Dict[str, Optional[str]] = Field(..., description="Branding assets") layout: Dict[str, str] = Field(..., description="Layout settings") social_links: Optional[Dict[str, str]] = Field(default_factory=dict, description="Social links") custom_css: Optional[str] = Field(None, description="Custom CSS") css_variables: Optional[Dict[str, str]] = Field(None, description="CSS custom properties") class ThemePresetPreview(BaseModel): """Preview information for a theme preset.""" name: str = Field(..., description="Preset name") description: str = Field(..., description="Preset description") primary_color: str = Field(..., description="Primary color") secondary_color: str = Field(..., description="Secondary color") accent_color: str = Field(..., description="Accent color") heading_font: str = Field(..., description="Heading font") body_font: str = Field(..., description="Body font") layout_style: str = Field(..., description="Layout style") class ThemePresetResponse(BaseModel): """Response after applying a preset.""" message: str = Field(..., description="Success message") theme: VendorThemeResponse = Field(..., description="Applied theme") class ThemePresetListResponse(BaseModel): """List of available theme presets.""" presets: List[ThemePresetPreview] = Field(..., description="Available presets")