import hashlib
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="设备详细信息")


def md5_encrypt(text: str) -> str:
    """对字符串进行MD5加密"""
    if not text:
        return ""
    md5_hash = hashlib.md5()
    md5_hash.update(text.encode('utf-8'))
    return md5_hash.hexdigest()


# ------------------------------
# 响应模型（后端返回设备数据）
# ------------------------------
class DeviceResponse(BaseModel):
    """设备流信息响应模型（字段与表结构完全对齐）"""
    id: int = Field(..., description="设备ID")
    hostname: Optional[str] = Field(None, max_length=100, description="设备别名")
    rtmp_push_url: Optional[str] = Field(None, description="需要推送的RTMP地址")
    live_webrtc_url: Optional[str] = Field(None, description="直播的Webrtc地址")
    detection_webrtc_url: Optional[str] = Field(None, description="检测的Webrtc地址")
    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="设备详细信息")
    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="设备列表")
