// /// Created by Haoyi on 2021/7/1
//
// part of "../product_model.dart";
//
// class ProductProfile {
//   final List<ProductId> oneOffChargeIapIds = [];
//   final List<ProductId> subscriptionsIapIds = [];
//   final List<ProductId> noAdsCapIds;
//
//   final List<ProductId> igcIds = [];
//   final List<ProductId> rewardIds = [];
//
//   final List<Map<String, ProductId>> _idsMap =
//       List.generate(TransactionAttributes.count, (index) => <String, ProductId>{});
//
//   ProductProfile(
//       {required List<ProductId> oneOffChargeIapIds,
//       required List<ProductId> subscriptionsIapIds,
//       List<ProductId> igcIds = const <ProductId>[],
//       List<ProductId> rewardIds = const <ProductId>[],
//       this.noAdsCapIds = const <ProductId>[]}) {
//     for (var productId in oneOffChargeIapIds) {
//       _define(productId, TransactionMethod.iap);
//     }
//     for (var productId in subscriptionsIapIds) {
//       _define(productId, TransactionMethod.iap);
//     }
//     for (var productId in igcIds) {
//       _define(productId, TransactionMethod.igc);
//     }
//     for (var productId in rewardIds) {
//       _define(productId, TransactionMethod.reward);
//     }
//   }
//
//   bool hasIap() => oneOffChargeIapIds.isEmpty && subscriptionsIapIds.isEmpty;
//
//   ProductId _define(ProductId productId, TransactionMethod method) {
//     switch (method) {
//       case TransactionMethod.iap:
//         if (productId.isOneOffCharge) {
//           oneOffChargeIapIds.add(productId);
//         } else if (productId.isSubscription) {
//           subscriptionsIapIds.add(productId);
//         }
//         break;
//       case TransactionMethod.igc:
//         igcIds.add(productId);
//         break;
//       case TransactionMethod.reward:
//         rewardIds.add(productId);
//         break;
//       case TransactionMethod.none:
//         break;
//     }
//     _idsMap[productId.attr][productId.sku] = productId;
//     return productId;
//   }
//
//   ProductId findOrCreate(String sku, int attr, TransactionMethod method) {
//     return _find(sku, attr) ?? _define(ProductId(android: sku, ios: sku, attr: attr), method);
//   }
//
//   ProductId? _find(String sku, int attr) {
//     return _idsMap[attr][sku];
//   }
//
//   ProductId? find({String? sku, int? attr}) {
//     if (sku == null) {
//       return null;
//     }
//
//     if (attr != null) {
//       return _find(sku, attr);
//     } else {
//       return _find(sku, TransactionAttributes.possessive) ??
//           _find(sku, TransactionAttributes.subscriptions) ??
//           _find(sku, TransactionAttributes.consumable);
//     }
//   }
// }
//
// class IapProfile {
//   final List<ProductId> oneOffChargeIapIds = [];
//   final List<ProductId> subscriptionsIapIds = [];
//   final List<ProductId> noAdsCapIds;
//   final List<Map<String, ProductId>> _idsMap =
//       List.generate(TransactionAttributes.count, (index) => <String, ProductId>{});
//
//   IapProfile(
//       {required List<ProductId> oneOffChargeIapIds,
//       required List<ProductId> subscriptionsIapIds,
//       this.noAdsCapIds = const <ProductId>[]}) {
//     for (var productId in oneOffChargeIapIds) {
//       _define(productId);
//     }
//     for (var productId in subscriptionsIapIds) {
//       _define(productId);
//     }
//   }
//
//   bool hasIap() => oneOffChargeIapIds.isEmpty && subscriptionsIapIds.isEmpty;
//
//   static final IapProfile invalid =
//       IapProfile(oneOffChargeIapIds: [], subscriptionsIapIds: [], noAdsCapIds: []);
//
//   ProductId _define(ProductId productId) {
//     if (productId.isOneOffCharge) {
//       oneOffChargeIapIds.add(productId);
//     } else if (productId.isSubscription) {
//       subscriptionsIapIds.add(productId);
//     } else {
//       return productId;
//     }
//     _idsMap[productId.attr][productId.sku] = productId;
//     return productId;
//   }
//
//   ProductId findOrCreate(String sku, int attr) {
//     return _find(sku, attr) ?? _define(ProductId(android: sku, ios: sku, attr: attr));
//   }
//
//   ProductId? _find(String sku, int attr) {
//     return _idsMap[attr][sku];
//   }
//
//   ProductId? find({String? sku, int? attr}) {
//     if (sku == null) {
//       return null;
//     }
//
//     if (attr != null) {
//       return _find(sku, attr);
//     } else {
//       return _find(sku, TransactionAttributes.possessive) ??
//           _find(sku, TransactionAttributes.subscriptions) ??
//           _find(sku, TransactionAttributes.consumable);
//     }
//   }
// }
//
// class ProductIds {
//   static const ProductId invalid =
//       ProductId(android: "", attr: TransactionAttributes.unknown, ios: "");
// }
