# -*- coding: utf-8 -*-

from pydantic import BaseModel, ConfigDict, Field


class CpuInfoSchema(BaseModel):
    """CPU信息模型"""

    model_config = ConfigDict(from_attributes=True)

    cpu_num: int = Field(description="CPU核心数")
    used: float = Field(ge=0, le=100, description="CPU用户使用率(%)")
    sys: float = Field(ge=0, le=100, description="CPU系统使用率(%)")
    free: float = Field(ge=0, le=100, description="CPU空闲率(%)")


class MemoryInfoSchema(BaseModel):
    """内存信息模型"""

    model_config = ConfigDict(from_attributes=True)

    total: str = Field(description="内存总量")
    used: str = Field(description="已用内存")
    free: str = Field(description="剩余内存")
    usage: float = Field(ge=0, le=100, description="使用率(%)")


class SysInfoSchema(BaseModel):
    """系统信息模型"""

    model_config = ConfigDict(from_attributes=True)

    computer_ip: str = Field(description="服务器IP")
    computer_name: str = Field(description="服务器名称")
    os_arch: str = Field(description="系统架构")
    os_name: str = Field(description="操作系统")
    user_dir: str = Field(description="项目路径")


class PyInfoSchema(BaseModel):
    """Python运行信息模型"""

    model_config = ConfigDict(from_attributes=True)

    name: str = Field(description="Python名称")
    version: str = Field(description="Python版本")
    start_time: str = Field(description="启动时间")
    run_time: str = Field(description="运行时长")
    home: str = Field(description="安装路径")
    memory_used: str = Field(description="内存占用")
    memory_usage: float = Field(ge=0, le=100, description="内存使用率(%)")
    memory_total: str = Field(description="总内存")
    memory_free: str = Field(description="剩余内存")


class DiskInfoSchema(BaseModel):
    """磁盘信息模型"""

    model_config = ConfigDict(from_attributes=True)

    dir_name: str = Field(description="磁盘路径")
    sys_type_name: str = Field(description="文件系统类型")
    type_name: str = Field(description="磁盘类型")
    total: str = Field(description="总容量")
    used: str = Field(description="已用容量")
    free: str = Field(description="可用容量")
    usage: float = Field(ge=0, le=100, description="使用率(%)")


class ServerMonitorSchema(BaseModel):
    """服务器监控信息模型"""

    model_config = ConfigDict(from_attributes=True)

    cpu: CpuInfoSchema = Field(description="CPU信息")
    mem: MemoryInfoSchema = Field(description="内存信息")
    py: PyInfoSchema = Field(description="Python运行信息")
    sys: SysInfoSchema = Field(description="系统信息")
    disks: list[DiskInfoSchema] = Field(default_factory=list, description="磁盘信息")
