# models/schema/vendor_theme.py """ Pydantic schemas for vendor theme operations. """ from pydantic import BaseModel, Field class VendorThemeColors(BaseModel): """Color scheme for vendor theme.""" primary: str | None = Field(None, description="Primary brand color") secondary: str | None = Field(None, description="Secondary color") accent: str | None = Field(None, description="Accent/CTA color") background: str | None = Field(None, description="Background color") text: str | None = Field(None, description="Text color") border: str | None = Field(None, description="Border color") class VendorThemeFonts(BaseModel): """Typography settings for vendor theme.""" heading: str | None = Field(None, description="Font for headings") body: str | None = Field(None, description="Font for body text") class VendorThemeBranding(BaseModel): """Branding assets for vendor theme.""" logo: str | None = Field(None, description="Logo URL") logo_dark: str | None = Field(None, description="Dark mode logo URL") favicon: str | None = Field(None, description="Favicon URL") banner: str | None = Field(None, description="Banner image URL") class VendorThemeLayout(BaseModel): """Layout settings for vendor theme.""" style: str | None = Field( None, description="Product layout style (grid, list, masonry)" ) header: str | None = Field( None, description="Header style (fixed, static, transparent)" ) product_card: str | None = Field( None, description="Product card style (modern, classic, minimal)" ) class VendorThemeUpdate(BaseModel): """Schema for updating vendor theme (partial updates allowed).""" theme_name: str | None = Field(None, description="Theme preset name") colors: dict[str, str] | None = Field(None, description="Color scheme") fonts: dict[str, str] | None = Field(None, description="Font settings") branding: dict[str, str | None] | None = Field(None, description="Branding assets") layout: dict[str, str] | None = Field(None, description="Layout settings") custom_css: str | None = Field(None, description="Custom CSS rules") social_links: dict[str, str] | None = 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, str | None] = Field(..., description="Branding assets") layout: dict[str, str] = Field(..., description="Layout settings") social_links: dict[str, str] | None = Field( default_factory=dict, description="Social links" ) custom_css: str | None = Field(None, description="Custom CSS") css_variables: dict[str, str] | None = 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") class ThemeDeleteResponse(BaseModel): """Response after deleting a theme.""" message: str = Field(..., description="Success message")