class ApiException implements Exception {
  ApiException({
    required this.message,
    this.statusCode,
    this.errorCode,
    this.billingUrl,
  });

  final String message;
  final int? statusCode;
  final String? errorCode;
  final String? billingUrl;

  bool get isPremiumRequired => errorCode == 'premium_required';

  @override
  String toString() => message;

  static ApiException? fromDio(dynamic error) {
    // ignore: avoid_dynamic_calls
    final response = error.response;
    if (response == null) return null;
    final data = response.data;
    if (data is! Map<String, dynamic>) return null;
    return ApiException(
      message: data['error'] as String? ?? 'Errore di rete',
      statusCode: response.statusCode as int?,
      errorCode: data['error_code'] as String?,
      billingUrl: data['billing_url'] as String?,
    );
  }
}
