"""
Pydantic schema for SkeletonBase component.

AUTO-GENERATED FROM ui-manifest.json - DO NOT EDIT MANUALLY
Source: skeletons/SkeletonBase.tsx
Component Path: skeletons/SkeletonBase
"""

from typing import Any, Literal

from pydantic import Field

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


class SkeletonBaseProps(JSONFieldSchema):
    """Props for SkeletonBase component."""

    class_name: str | None = Field(default=None, alias="className")
    animate: bool | None = Field(default=None, description="Whether to animate with shimmer effect")
    aria_label: str | None = Field(default=None, alias="aria-label", description="Accessible label for screen readers")


class SkeletonLineProps(JSONFieldSchema):
    """Skeleton line for text content"""

    width: str | None = Field(default=None, description="Width of the line (CSS value or Tailwind class)")
    height: Literal["h-10", "h-12", "h-14", "h-16", "h-3", "h-4", "h-5", "h-6", "h-8"] | None = Field(
        default=None, description="Height using Tailwind height class"
    )


class SkeletonCircleProps(JSONFieldSchema):
    """Skeleton circle for avatars and icons"""

    size: Literal["w-10 h-10", "w-12 h-12", "w-16 h-16", "w-20 h-20", "w-24 h-24", "w-6 h-6", "w-8 h-8"] | None = Field(
        default=None, description="Size using Tailwind size class"
    )


class SkeletonButtonProps(JSONFieldSchema):
    """Skeleton button"""

    size: Literal["lg", "md", "sm"] | None = Field(default=None, description="Button size variant")
    width: str | None = Field(default=None, description="Width override")


class SkeletonImageProps(JSONFieldSchema):
    """Skeleton image/media placeholder"""

    aspect_ratio: Literal["aspect-[16/9]", "aspect-[3/2]", "aspect-[4/3]", "aspect-square", "aspect-video"] | None = (
        Field(default=None, alias="aspectRatio", description="Aspect ratio class")
    )


class SkeletonContainerProps(JSONFieldSchema):
    """Props for SkeletonContainer component."""

    children: str | dict[str, Any] | None
    class_name: str | None = Field(default=None, alias="className")
    is_loading: bool | None = Field(default=None, alias="isLoading", description="Whether the skeleton is loading")
    content: str | dict[str, Any] | None | None = Field(default=None, description="Content to show when not loading")
    loading_message: str | None = Field(default=None, alias="loadingMessage", description="Accessible loading message")


class SkeletonSectionProps(JSONFieldSchema):
    """Section skeleton wrapper with standard padding"""

    children: str | dict[str, Any] | None
    class_name: str | None = Field(default=None, alias="className")
    padding: Literal["lg", "md", "sm"] | None = Field(default=None, description="Section padding size")


class SkeletonHeadingBlockProps(JSONFieldSchema):
    """Skeleton for a heading + description pattern"""

    centered: bool | None = Field(default=None, description="Whether to center the content")
    with_badge: bool | None = Field(default=None, alias="withBadge", description="Include a badge above the heading")
    description_lines: Literal[3, 2, 1] | None = Field(
        default=None, alias="descriptionLines", description="Number of description lines"
    )
    class_name: str | None = Field(default=None, alias="className")


class SkeletonCardProps(JSONFieldSchema):
    """Skeleton for a card pattern"""

    with_image: bool | None = Field(default=None, alias="withImage", description="Include an image at the top")
    image_aspect: Literal["aspect-[4/3]", "aspect-square", "aspect-video"] | None = Field(
        default=None, alias="imageAspect", description="Image aspect ratio"
    )
    lines: int | float | None = Field(default=None, description="Number of text lines")
    class_name: str | None = Field(default=None, alias="className")


class SkeletonAvatarBlockProps(JSONFieldSchema):
    """Skeleton for an avatar + text pattern (testimonials, team members)"""

    avatar_size: Literal["w-10 h-10", "w-12 h-12", "w-16 h-16"] | None = Field(
        default=None, alias="avatarSize", description="Avatar size"
    )
    layout: Literal["horizontal", "vertical"] | None = Field(default=None, description="Layout direction")
    class_name: str | None = Field(default=None, alias="className")
