# app/modules/cms/schemas/store_theme.py
"""
Pydantic schemas for store theme operations.
"""

from pydantic import BaseModel, Field


class StoreThemeColors(BaseModel):
    """Color scheme for store 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 StoreThemeFonts(BaseModel):
    """Typography settings for store theme."""

    heading: str | None = Field(None, description="Font for headings")
    body: str | None = Field(None, description="Font for body text")


class StoreThemeBranding(BaseModel):
    """Branding assets for store 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 StoreThemeLayout(BaseModel):
    """Layout settings for store 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 StoreThemeUpdate(BaseModel):
    """Schema for updating store 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 StoreThemeResponse(BaseModel):
    """Schema for store 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: StoreThemeResponse = 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")
