# =============================================================================
# 企微IT智能服务台 — 火绒集成自定义异常
# =============================================================================
# 说明：火绒API调用中可能抛出的各种异常类型
# 包含：认证错误、连接超时、API错误码等
# =============================================================================


class HuorongError(Exception):
    """火绒集成基础异常。

    所有火绒相关异常的父类，便于统一捕获处理。

    Attributes:
        code: 错误码（火绒API返回的errcode，或自定义错误码）
        message: 错误描述
    """

    def __init__(self, code: int = -1, message: str = "火绒API调用失败"):
        self.code = code
        self.message = message
        super().__init__(f"[HuorongError:{code}] {message}")


class HuorongAuthError(HuorongError):
    """火绒认证失败异常。

    场景：AccessKey ID/Secret 无效、签名校验失败、权限不足
    火绒API返回 errcode=401 或签名相关错误时抛出。
    """

    def __init__(self, message: str = "火绒API认证失败，请检查AccessKey配置"):
        super().__init__(code=401, message=message)


class HuorongConnectionError(HuorongError):
    """火绒连接失败异常。

    场景：内网地址不通、超时、DNS解析失败
    """

    def __init__(self, message: str = "无法连接火绒服务器，请检查网络和Base URL配置"):
        super().__init__(code=502, message=message)


class HuorongConfigError(HuorongError):
    """火绒配置缺失异常。

    场景：AccessKey ID/Secret/Base URL 未在系统配置中设置
    """

    def __init__(self, message: str = "火绒集成未配置，请先在管理后台设置AccessKey和Base URL"):
        super().__init__(code=400, message=message)


class HuorongApiError(HuorongError):
    """火绒API业务错误。

    场景：火绒API返回非0 errcode（如参数错误、终端不存在等）
    """

    def __init__(self, code: int, message: str):
        super().__init__(code=code, message=message)
