"""
网络连接恢复技能 - 断网时尝试恢复上网（仅合法操作）

通过 Hawk 模块执行：开 WiFi、打开系统网络设置、连接已保存网络等。
不涉及且永不涉及：破解密码、未授权访问等任何违规行为。
若设备无可用已保存网络，仅打开 WiFi 设置供用户手动连接或输入密码。
"""

import logging
import sys
import os
from typing import Dict, Any

# 兼容独立运行和包导入
_agent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if _agent_dir not in sys.path:
    sys.path.insert(0, _agent_dir)

try:
    from skills.base import BaseSkill
except ImportError:
    from ..base import BaseSkill

logger = logging.getLogger(__name__)


class NetworkReconnectSkill(BaseSkill):
    """网络连接恢复技能 - 与 Hawk 协同，仅做合法网络恢复"""

    PACKAGE = ""
    NAME = "网络恢复"

    def try_reconnect(self) -> Dict[str, Any]:
        """
        尝试恢复网络：委托 Hawk 执行开 WiFi、打开设置、连接已保存网络等合法操作。
        若仍连不上，返回建议（如「请在设置中手动连接或输入密码」）。
        """
        try:
            from hawk import try_reconnect_network, is_network_available

            if self.d is None:
                return {"success": False, "message": "无设备，无法执行网络恢复", "steps": []}

            if is_network_available(self.d):
                return {"success": True, "message": "当前已有网络", "steps": ["检测到网络"]}

            result = try_reconnect_network(self.d)
            if self.bus:
                self.bus.append(self.NAME, result.get("message", ""), data=result)
            return result
        except ImportError as e:
            logger.warning("Hawk 模块未安装，无法执行网络恢复: %s", e)
            return {
                "success": False,
                "message": "Hawk 模块不可用，请检查网络或手动连接 WiFi",
                "steps": [],
            }
        except Exception as e:
            logger.exception("网络恢复失败")
            return {"success": False, "message": str(e), "steps": []}
