"""系统信息 Skill。"""

import subprocess

from butler.skills.base import SkillBase, SkillContext, SkillResult


class SystemSkill(SkillBase):
    """获取系统负载和资源信息。"""

    name = "system"
    description = "获取系统负载和资源信息"
    triggers = ["/sys", "/system", "/load"]

    async def execute(self, ctx: SkillContext) -> SkillResult:
        args = ctx.args

        if not args or args[0] == "help":
            return SkillResult(success=False, output="用法: /system [load|disk|mem]")

        cmd = args[0]

        if cmd == "load":
            return self._get_load()
        elif cmd == "disk":
            return self._get_disk()
        elif cmd == "mem":
            return self._get_memory()

        return SkillResult(success=False, output=f"未知命令: {cmd}\n用法: /system [load|disk|mem]")

    def _get_load(self) -> SkillResult:
        try:
            result = subprocess.run(["uptime"], capture_output=True, text=True, timeout=5)
            return SkillResult(success=True, output=result.stdout.strip())
        except Exception as e:
            return SkillResult(success=False, output=f"获取系统负载失败: {e}")

    def _get_disk(self) -> SkillResult:
        try:
            result = subprocess.run(["df", "-h", "/"], capture_output=True, text=True, timeout=5)
            return SkillResult(success=True, output=result.stdout.strip())
        except Exception as e:
            return SkillResult(success=False, output=f"获取磁盘信息失败: {e}")

    def _get_memory(self) -> SkillResult:
        try:
            result = subprocess.run(["free", "-h"], capture_output=True, text=True, timeout=5)
            return SkillResult(success=True, output=result.stdout.strip())
        except Exception as e:
            return SkillResult(success=False, output=f"获取内存信息失败: {e}")
