from typing import Any

from pydantic import BaseModel, Field


class EvaluationPointBaseDTO(BaseModel):
    name: str | None = Field(None, description="评查点名称")
    code: str | None = Field(None, description="评查点编码")
    risk: str | None = Field(None, description="风险等级")
    is_enabled: bool | None = Field(None, description="是否启用")
    description: str | None = Field(None, description="评查点描述")
    evaluation_point_groups_id: int | None = Field(None, description="二级分组ID")
    evaluation_point_groups_pid: int | None = Field(None, description="一级分组ID")
    document_attribute_type: str | None = Field(None, description="适用属性类型")
    references_laws: dict[str, Any] | None = Field(None, description="法律依据")
    extraction_config: dict[str, Any] | None = Field(None, description="抽取配置")
    evaluation_config: dict[str, Any] | None = Field(None, description="评查配置")
    pass_message: str | None = Field(None, description="通过提示")
    fail_message: str | None = Field(None, description="不通过提示")
    suggestion_message: str | None = Field(None, description="建议提示")
    suggestion_message_type: str | None = Field(None, description="建议提示类型")
    post_action: str | None = Field(None, description="后置动作")
    action_config: str | None = Field(None, description="动作配置")
    score: float | int | None = Field(None, description="分值")
    area: str | None = Field(None, description="地区")


class EvaluationPointCreateDTO(EvaluationPointBaseDTO):
    name: str = Field(..., description="评查点名称")
    code: str = Field(..., description="评查点编码")
    risk: str = Field(..., description="风险等级")
    is_enabled: bool = Field(True, description="是否启用")
    evaluation_point_groups_id: int = Field(..., description="二级分组ID")
    evaluation_point_groups_pid: int = Field(..., description="一级分组ID")


class EvaluationPointUpdateDTO(EvaluationPointBaseDTO):
    pass
