import 'dart:convert'; class ProfileDTO { const ProfileDTO(this.fullName, this.dateOfBirth, this.residenceCountry); factory ProfileDTO.fromJson(Map data) => ProfileDTO( data['fullName'] as String? ?? '', data['dateOfBirth'] as String? ?? '', data['residenceCountry'] as String? ?? '', ); final String fullName, dateOfBirth, residenceCountry; Map toJson() => { 'fullName': fullName, 'dateOfBirth': dateOfBirth, 'residenceCountry': residenceCountry, }; } class VerificationDTO { const VerificationDTO( this.status, this.reason, this.id, this.profile, { this.upgradePending = false, }); factory VerificationDTO.decode(String body) { final envelope = jsonDecode(body) as Map; if (envelope['status'] != 'success') throw const FormatException('Unaccepted verification'); final data = envelope['data'] as Map; return VerificationDTO( data['status'] as String, data['reason'] as String?, data['submissionId'] as String?, ProfileDTO.fromJson(data['profile'] as Map), upgradePending: data['upgradePending'] as bool? ?? false, ); } final String status; final String? reason, id; final ProfileDTO profile; final bool upgradePending; } class PolicyDTO { const PolicyDTO(this.tier, this.profileRef, this.entries); factory PolicyDTO.decode(String body) { final envelope = jsonDecode(body) as Map; if (envelope['status'] != 'success') throw const FormatException('Unaccepted limits'); final data = envelope['data'] as Map; return PolicyDTO( data['tier'] as String, data['profileRef'] as String, (data['entries'] as List) .map((v) => LimitDTO.fromJson(v as Map)) .toList(), ); } final String tier, profileRef; final List entries; } class LimitDTO { LimitDTO.fromJson(Map d) : operation = d['operation'] as String, period = d['period'] as String, currency = d['currency'] as String, cap = d['cap'] as String, remaining = d['remaining'] as String, used = d['used'] as String, reserved = d['reserved'] as String; final String operation, period, currency, cap, remaining, used, reserved; }