from datetime import datetime
from typing import Optional, List, Dict

from pydantic import BaseModel, Field


# ------------------------------
# 请求模型
# ------------------------------
class DeviceCreateRequest(BaseModel):
    """设备创建请求模型"""
    ip: Optional[str] = Field(..., max_length=100, description="设备IP地址")
    hostname: Optional[str] = Field(None, max_length=100, description="设备别名")
    params: Optional[Dict] = Field(None, description="设备扩展参数（JSON格式）")


# ------------------------------
# 响应模型
# ------------------------------
class DeviceResponse(BaseModel):
    """单设备信息响应模型（与数据库表字段对齐）"""
    id: int = Field(..., description="设备主键ID")
    client_ip: Optional[str] = Field(None, max_length=100, description="设备IP地址")
    hostname: Optional[str] = Field(None, max_length=100, description="设备别名")
    device_online_status: int = Field(..., description="在线状态（1-在线、0-离线）")
    device_type: Optional[str] = Field(None, description="设备类型")
    alarm_count: int = Field(..., description="报警次数")
    params: Optional[str] = Field(None, description="扩展参数（JSON字符串）")
    created_at: datetime = Field(..., description="记录创建时间")
    updated_at: datetime = Field(..., description="记录更新时间")

    model_config = {"from_attributes": True}  # 支持从数据库结果直接转换


class DeviceListResponse(BaseModel):
    """设备列表响应模型"""
    total: int = Field(..., description="设备总数")
    devices: List[DeviceResponse] = Field(..., description="设备列表")


class DeviceStatusHistoryResponse(BaseModel):
    """设备上下线记录响应模型"""
    id: int = Field(..., description="记录ID")
    device_id: int = Field(..., description="关联设备ID")
    client_ip: Optional[str] = Field(None, description="设备IP地址")
    status: int = Field(..., description="状态（1-在线、0-离线）")
    status_time: datetime = Field(..., description="状态变更时间")

    model_config = {"from_attributes": True}


class DeviceStatusHistoryListResponse(BaseModel):
    """设备上下线记录列表响应模型"""
    total: int = Field(..., description="记录总数")
    history: List[DeviceStatusHistoryResponse] = Field(..., description="上下线记录列表")