enum ProductCode { newUserPack, starterPack, popularPack, premiumPack } enum PackageType { starter, regular } class PackageInfo { const PackageInfo({ required this.productCode, required this.appStoreProductId, required this.type, required this.credits, required this.isStarter, required this.starterEligible, required this.sortOrder, }); final ProductCode productCode; final String appStoreProductId; final PackageType type; final int credits; final bool isStarter; final bool starterEligible; final int sortOrder; factory PackageInfo.fromJson(Map json) { return PackageInfo( productCode: _parseProductCode(json['productCode'] as String), appStoreProductId: json['appStoreProductId'] as String, type: json['type'] == 'starter' ? PackageType.starter : PackageType.regular, credits: json['credits'] as int, isStarter: json['isStarter'] as bool, starterEligible: json['starterEligible'] as bool, sortOrder: json['sortOrder'] as int, ); } static ProductCode _parseProductCode(String code) { return switch (code) { 'new_user_pack' => ProductCode.newUserPack, 'starter_pack' => ProductCode.starterPack, 'popular_pack' => ProductCode.popularPack, 'premium_pack' => ProductCode.premiumPack, _ => throw ArgumentError('Unknown product code: $code'), }; } } class PackagesResult { const PackagesResult({ required this.packages, }); final List packages; factory PackagesResult.fromJson(Map json) { return PackagesResult( packages: (json['packages'] as List) .map((e) => PackageInfo.fromJson(e as Map)) .toList(), ); } }