from datetime import datetime
from pydantic import BaseModel, Field
from typing import List, Optional


# ------------------------------
# 请求模型（前端传参校验）- 保留update的eigenvalue（如需更新特征值）
# ------------------------------
class FaceCreateRequest(BaseModel):
    """创建人脸记录请求模型（无需ID、由数据库自增）"""
    name: Optional[str] = Field(None, max_length=255, description="名称（可选、最长255字符）")


class FaceUpdateRequest(BaseModel):
    """更新人脸记录请求模型 - 保留eigenvalue（如需更新特征值，不影响返回）"""
    name: Optional[str] = Field(None, max_length=255, description="名称（可选）")
    eigenvalue: Optional[str] = Field(None, description="特征值（可选，文件处理后可更新）")  # 保留更新能力
    address: Optional[str] = Field(None, description="图片完整路径（可选，更新图片时使用）")


# ------------------------------
# 响应模型（后端返回数据）- 核心修改：删除eigenvalue字段
# ------------------------------
class FaceResponse(BaseModel):
    """人脸记录响应模型（仅返回需要的字段，移除eigenvalue）"""
    id: int = Field(..., description="主键ID（数据库自增）")
    name: Optional[str] = Field(None, description="名称")
    address: Optional[str] = Field(None, description="人脸图片完整保存路径（数据库新增字段）")  # 仅保留address
    created_at: datetime = Field(..., description="记录创建时间（数据库自动生成）")
    updated_at: datetime = Field(..., description="记录更新时间（数据库自动生成）")

    # 关键配置：支持从数据库查询结果（字典）直接转换
    model_config = {"from_attributes": True}


class FaceListResponse(BaseModel):
    """人脸列表分页响应模型（结构不变，内部FaceResponse已移除eigenvalue）"""
    total: int = Field(..., description="筛选后的总记录数")
    faces: List[FaceResponse] = Field(..., description="当前页的人脸记录列表")

    model_config = {"from_attributes": True}