"""
Social proof section component schemas.

Mirrors lightwave-ui/src/components/marketing/social-proof/.
"""

from pydantic import BaseModel, ConfigDict, Field


class LogoItem(BaseModel):
    """
    Company logo item for social proof sections.

    Matches TypeScript:
        interface LogoItem {
            name: string;
            logoUrl: string;
            logoUrlDark?: string;
            href?: string;
        }
    """

    name: str = Field(..., description="Company name")
    logo_url: str = Field(..., serialization_alias="logoUrl", description="Logo image URL")
    logo_url_dark: str | None = Field(None, serialization_alias="logoUrlDark", description="Dark mode logo URL")
    href: str | None = Field(None, description="Company website URL")

    model_config = ConfigDict(
        populate_by_name=True,
        extra="forbid",
    )


class PressMention(BaseModel):
    """
    Press mention for social proof.
    """

    publication: str = Field(..., description="Publication name")
    logo_url: str = Field(..., serialization_alias="logoUrl", description="Publication logo URL")
    quote: str | None = Field(None, description="Quote from publication")
    href: str | None = Field(None, description="Article URL")

    model_config = ConfigDict(
        populate_by_name=True,
        extra="forbid",
    )


class SocialProofSectionProps(BaseModel):
    """
    Base social proof section props.
    """

    eyebrow: str | None = Field(None, description="Small text above heading")
    headline: str | None = Field(None, description="Section headline")
    logos: list[LogoItem] | None = Field(None, description="Company logos")

    model_config = ConfigDict(
        populate_by_name=True,
        extra="forbid",
    )


class SocialProofCardBrandProps(SocialProofSectionProps):
    """
    Social proof with brand card style.
    """

    background_color: str | None = Field(None, serialization_alias="backgroundColor", description="Card background")


class SocialProofPressMentionsProps(SocialProofSectionProps):
    """
    Social proof with press mentions.
    """

    mentions: list[PressMention] | None = Field(None, description="List of press mentions")


__all__ = [
    "LogoItem",
    "PressMention",
    "SocialProofSectionProps",
    "SocialProofCardBrandProps",
    "SocialProofPressMentionsProps",
]
