# 联软LV7000异常体系
"""
定义联软API集成的异常类层级。

层级：
  LianruanError            — 基类（所有联软异常）
  ├── LianruanConfigError  — 配置缺失（未填写账号/密码/BaseURL）
  ├── LianruanAuthError    — 认证失败（IP不在白名单/账号密码错误/Token过期）
  ├── LianruanConnectionError — 网络连接失败（超时/拒绝连接）
  └── LianruanApiError     — API业务错误（参数错误/数据超限/其他）
"""


class LianruanError(Exception):
    """联软异常基类"""

    def __init__(self, message: str, detail: str = ""):
        self.message = message
        self.detail = detail
        super().__init__(message)


class LianruanConfigError(LianruanError):
    """配置缺失异常。
    
    场景：未配置联软 BaseURL / ApiAccount / ApiPassword
    """
    pass


class LianruanAuthError(LianruanError):
    """认证失败异常。
    
    场景：
    - IP不在白名单（status=INVALID）
    - 账号密码错误
    - Token过期（需重新获取）
    """
    pass


class LianruanConnectionError(LianruanError):
    """网络连接失败异常。
    
    场景：超时/拒绝连接/DNS解析失败
    """
    pass


class LianruanApiError(LianruanError):
    """API业务错误异常。
    
    场景：
    - 参数错误（status=ERROR）
    - 数据量超限（status=Exceed）
    - 其他业务异常
    """

    def __init__(self, message: str, status: str = "", detail: str = ""):
        self.status = status  # 联软返回的status字段（ERROR/Exceed等）
        super().__init__(message, detail)
