from typing import Literal

from pydantic import Field

from ..core.base import RenderableComponent

__all__ = ["Alert"]


class Alert(RenderableComponent):
    """一个带样式的提示框组件，用于显示重要信息。"""

    component_type: Literal["alert"] = "alert"
    type: Literal["info", "success", "warning", "error"] = Field(
        default="info", description="提示框的类型，决定了颜色和图标"
    )
    """提示框的类型，决定了颜色和图标"""
    title: str = Field(..., description="提示框的标题")
    """提示框的标题"""
    content: str = Field(..., description="提示框的主要内容")
    """提示框的主要内容"""
    show_icon: bool = Field(default=True, description="是否显示与类型匹配的图标")
    """是否显示与类型匹配的图标"""

    @property
    def template_name(self) -> str:
        return "components/widgets/alert"
