// ============================================================
// Failures — 领域层统一错误类型
// 所有 Repository/UseCase 抛出的错误均为 Failure 的子类，
// 避免 Presentation 层依赖具体异常类型（DioException 等）
// ============================================================

sealed class Failure implements Exception {
  final String message;
  const Failure(this.message);

  @override
  String toString() => '$runtimeType: $message';
}

/// 网络/HTTP 层错误（连接失败、超时等）
class NetworkFailure extends Failure {
  const NetworkFailure([super.message = '网络错误，请检查连接']);
}

/// 服务端返回业务错误（HTTP 4xx/5xx + 业务 code）
class ServerFailure extends Failure {
  final int? statusCode;
  const ServerFailure(super.message, {this.statusCode});
}

/// 认证失败（401/403、Token 失效、权限不足）
class AuthFailure extends Failure {
  const AuthFailure([super.message = '认证失败，请重新登录']);
}

/// 本地缓存/存储错误
class CacheFailure extends Failure {
  const CacheFailure([super.message = '本地数据读写失败']);
}

/// 业务校验错误（输入不合法等）
class ValidationFailure extends Failure {
  const ValidationFailure(super.message);
}

/// 未知错误兜底
class UnknownFailure extends Failure {
  const UnknownFailure([super.message = '未知错误']);
}
