"""
Blog island prop schemas.

Auto-generated from packages/lightwave-ui/src/islands/blog-registry.tsx
Generated: 2026-02-02

Islands are React components hydrated on the client. These schemas define
the props that Django passes to the React island via JSON serialization.
"""

from pydantic import ConfigDict, Field

from lightwave.schema.pydantic.core.base import LightwaveBaseSchema


class BlogPostsItem(LightwaveBaseSchema):
    """Nested item type for posts."""

    title: str = None
    excerpt: str | None = None
    date: str | None = None
    author: str | None = None
    href: str | None = None
    image_url: str | None = Field(None, serialization_alias="imageUrl")

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


class BaseBlogProps(LightwaveBaseSchema):
    """
    Base props that all blog variants should support.

    Source: packages/lightwave-ui/src/islands/blog-registry.tsx
    """

    headline: str | None = None
    description: str | None = None
    posts: list[BlogPostsItem] | None = None

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


BLOG_VARIANTS = [
    "section-simple-center-aligned-01",
    "header-simple-01",
    "section-carousel-layout-01",
    "header-featured-post-01",
]

__all__ = ["BaseBlogProps", "BLOG_VARIANTS"]
