getOldPurchaseEvent method

Future<void> getOldPurchaseEvent(
  1. GetOldPurchaseEvent event,
  2. Emitter<SubscriptionState> emit
)

Implementation

Future<void> getOldPurchaseEvent(GetOldPurchaseEvent event,Emitter<SubscriptionState> emit) async {

  int purchaseTime = 0;
  List<GooglePlayPurchaseDetails> androidPastPurchases = [];
  List<PurchaseDetails> iosPastPurchases = [];

  if(Platform.isAndroid){

    final InAppPurchaseAndroidPlatformAddition androidAddition =
    inAppPurchase.getPlatformAddition<InAppPurchaseAndroidPlatformAddition>();

    final QueryPurchaseDetailsResponse response =
    await androidAddition.queryPastPurchases();

    if (response.error != null) {
      AppLogs.showErrorLogs("Android past purchase error: ${response.error}");
      return;
    }
    if(response.pastPurchases.isNotEmpty){
      androidPastPurchases = response.pastPurchases;
    }
  }else{
    iosPastPurchases = await getIosPastPurchases();
  }

  if(planActiveCheckFromApi == true){

    CheckSubscriptionData? checkSubscriptionData ;
    if(checkSubscriptionApi.isNotEmpty) {
      checkSubscriptionData = await service
          .checkSubscription(
          apiType: checkSubscriptonApiRequestType,
          apiUrl: checkSubscriptionApi
      );
    }
    bool isActive = false;
    if(checkSubscriptionData != null){
      isActive = checkSubscriptionData.isActive ?? false;
    }
    if (isActive) {
      AppLogs.showInfoLogs("βœ… Active subscription");
      emit(state.copyWith( isSubscribed: true,
          pastSubscriptionId: checkSubscriptionData?.productId ?? "",
          subscriptionType: checkSubscriptionData?.subscriptionType ?? 0,
          subsExpiryDate: checkSubscriptionData?.expiryDate ?? "",
          purchases: Platform.isAndroid ? androidPastPurchases : iosPastPurchases
      ));
      final paidIndex = state.products.indexWhere((p) => p.id == checkSubscriptionData?.productId);
      emit(state.copyWith(selectedItem: paidIndex));
    }else{
      AppLogs.showInfoLogs("❌ No active subscription");
      emit(state.copyWith( isSubscribed: false,
          pastSubscriptionId: "",
          subscriptionType: 0,
          subsExpiryDate: "",
          selectedItem: 0
      ));
    }
  }else{
    if(Platform.isAndroid && androidPastPurchases.isNotEmpty){
      for (int i = 0; i < androidPastPurchases.length; i++) {
        final purchasedProductId = androidPastPurchases[i].productID;

        final data = jsonDecode(
            androidPastPurchases[i].billingClientPurchase.originalJson);

        final purchaseTimeMillis = data['purchaseTime'] ?? 0;
        final purchaseDate = DateTime.fromMillisecondsSinceEpoch(
            purchaseTimeMillis);

        // Format date for logs
        final formattedDate = DateFormat('dd/MM/yyyy h:mm:ss').format(
            purchaseDate);
        AppLogs.showInfoLogs("Purchase Date: $formattedDate");

        // πŸ‘‡ Lookup duration from your subscriptionPlans map
        var duration = calculatePlanDuration(productId: purchasedProductId);

        // Add duration to purchase date
        AppLogs.showInfoLogs("Duration: $duration");
        final expiryDate = purchaseDate.add(duration ?? Duration.zero);

        // Format expiry date for logs
        final formattedExpiry = DateFormat('dd/MM/yyyy h:mm:ss').format(expiryDate);
        AppLogs.showInfoLogs("Expiry Date: $formattedExpiry");

        final currentDate = DateTime.now();
        final formattedCurrentDate = DateFormat('dd/MM/yyyy h:mm:ss').format(currentDate);
        AppLogs.showInfoLogs("current Date: $formattedCurrentDate");

        // Check expired or not
        final isSubscribed =  expiryDate.isAfter(DateTime.now());

        if (androidPastPurchases[i].status == PurchaseStatus.purchased) {
          final paidIndex = state.products.indexWhere((p) => p.id == purchasedProductId);

          AppLogs.showInfoLogs("paidIndex: $paidIndex");
          AppLogs.showInfoLogs("purchasedProductId: ${androidPastPurchases[i].productID}");

          emit(state.copyWith(
            isSubscribed: isSubscribed == true ? true : false,
            purchases: androidPastPurchases,
            selectedProductId: purchasedProductId,
            pastSubscriptionId: purchasedProductId,
            selectedItem: isSubscribed == true ? paidIndex : 0, ));

          AppLogs.showInfoLogs(isSubscribed == true ? "βœ… Active subscription" : "❌ Inactive subscription");
          AppLogs.showInfoLogs("purchasedId: $purchasedProductId");
          AppLogs.showInfoLogs("paidIndex (UI index): $paidIndex");
          break;
        } // stop after first match
      }
    }else if(Platform.isIOS && iosPastPurchases.isNotEmpty){
      for (int i = 0; i < iosPastPurchases.length; i++) {
        final purchasedProductId = iosPastPurchases[i].productID;

        purchaseTime = int.tryParse(iosPastPurchases[i].transactionDate ?? "0") ?? 0;

        final purchaseDate = DateTime.fromMillisecondsSinceEpoch(purchaseTime);

        // Format date for logs
        final formattedDate = DateFormat('dd/MM/yyyy HH:mm:ss').format(purchaseDate);
        AppLogs.showInfoLogs("Purchase Date: $formattedDate");

        // πŸ‘‡ Lookup duration from your subscriptionPlans map
        var duration = calculatePlanDuration(productId: purchasedProductId);

        AppLogs.showInfoLogs("Duration: $duration");
        // Add duration to purchase date
        final expiryDate = purchaseDate.add(duration ?? Duration.zero);

        // Format expiry date for logs
        final formattedExpiry = DateFormat('dd/MM/yyyy HH:mm:ss').format(expiryDate);
        AppLogs.showInfoLogs("Expiry Date: $formattedExpiry");

        // Check expired or not
        final isExpired =  expiryDate.isAfter(DateTime.now());
        final isSubscribed = !isExpired;

        if (iosPastPurchases[i].status == PurchaseStatus.purchased) {
          final paidIndex =
          state.products.indexWhere((p) => p.id == purchasedProductId);

          emit(state.copyWith(
            isSubscribed: isSubscribed,
            purchases: iosPastPurchases,
            selectedProductId: purchasedProductId,
            pastSubscriptionId: purchasedProductId,
            selectedItem: isSubscribed ? paidIndex : 0,
          ));

          AppLogs.showInfoLogs(
            "${isSubscribed ? "βœ… Active" : "❌ Expired"} | productId: $purchasedProductId",
          );

          break; // handle first valid purchase only
        }
      }
    }
  }
  emit(state.copyWith(loader: false));

  // if(Platform.isAndroid){
  //   final InAppPurchaseAndroidPlatformAddition androidAddition =
  //   inAppPurchase.getPlatformAddition<InAppPurchaseAndroidPlatformAddition>();
  //
  //   final QueryPurchaseDetailsResponse response =
  //   await androidAddition.queryPastPurchases();
  //
  //   if (response.error != null) {
  //     AppLogs.showErrorLogs("Android past purchase error: ${response.error}");
  //     return;
  //   }
  //   if(response.pastPurchases.isNotEmpty){
  //     for (int i = 0; i < response.pastPurchases.length; i++) {
  //       final purchasedProductId = response.pastPurchases[i].productID;
  //
  //       final data = jsonDecode(response.pastPurchases[i].billingClientPurchase.originalJson);
  //
  //       final purchaseTimeMillis = data['purchaseTime'] ?? 0;
  //       final purchaseDate = DateTime.fromMillisecondsSinceEpoch(purchaseTimeMillis);
  //
  //       // Format date for logs
  //       final formattedDate = DateFormat('dd/MM/yyyy h:mm:ss').format(purchaseDate);
  //       AppLogs.showInfoLogs("Purchase Date: $formattedDate");
  //
  //      // πŸ‘‡ Lookup duration from your subscriptionPlans map
  //       final duration = subscriptionPlans[purchasedProductId] ?? const Duration(days: 30);
  //
  //        // Add duration to purchase date
  //       final expiryDate = purchaseDate.add(duration);
  //
  //       // Format expiry date for logs
  //       final formattedExpiry = DateFormat('dd/MM/yyyy h:mm:ss').format(expiryDate);
  //       AppLogs.showInfoLogs("Expiry Date: $formattedExpiry");
  //
  //       final currentDate = DateTime.now();
  //       final formattedCurrentDate = DateFormat('dd/MM/yyyy h:mm:ss').format(currentDate);
  //       AppLogs.showInfoLogs("current Date: $formattedCurrentDate");
  //
  //       // Check expired or not
  //       final isSubscribed =  expiryDate.isAfter(DateTime.now());
  //
  //       if (response.pastPurchases[i].status == PurchaseStatus.purchased) {
  //         final paidIndex = state.products.indexWhere((p) => p.id == purchasedProductId);
  //
  //         AppLogs.showInfoLogs("paidIndex: $paidIndex");
  //         AppLogs.showInfoLogs("purchasedProductId: ${response.pastPurchases[i].productID}");
  //
  //         emit(state.copyWith(
  //           isSubscribed: isSubscribed == true ? true : false,
  //           purchases: response.pastPurchases,
  //           selectedProductId: purchasedProductId,
  //           pastSubscriptionId: purchasedProductId,
  //           selectedItem: isSubscribed == true ? paidIndex : 0, ));
  //
  //         AppLogs.showInfoLogs("${isSubscribed == true ? "βœ… Active subscription" : "❌ Inactive subscription"}");
  //         AppLogs.showInfoLogs("purchasedId: $purchasedProductId");
  //         AppLogs.showInfoLogs("paidIndex (UI index): $paidIndex");
  //         break;
  //       } // stop after first match
  //     }
  //   }
  //
  // }
  // else if (Platform.isIOS) {
  //
  //  List<PurchaseDetails> pastPurchases = await getIosPastPurchases();
  //
  //   if(pastPurchases.isNotEmpty){
  //     for (int i = 0; i < pastPurchases.length; i++) {
  //       final purchasedProductId = pastPurchases[i].productID;
  //
  //       purchaseTime = int.tryParse(pastPurchases[i].transactionDate ?? "0") ?? 0;
  //
  //       final purchaseDate = DateTime.fromMillisecondsSinceEpoch(purchaseTime);
  //
  //       // Format date for logs
  //       final formattedDate = DateFormat('dd/MM/yyyy HH:mm:ss').format(purchaseDate);
  //       AppLogs.showInfoLogs("Purchase Date: $formattedDate");
  //
  //       // πŸ‘‡ Lookup duration from your subscriptionPlans map
  //       final duration = subscriptionPlans[purchasedProductId] ?? const Duration(days: 30);
  //
  //       // Add duration to purchase date
  //       final expiryDate = purchaseDate.add(duration);
  //
  //       // Format expiry date for logs
  //       final formattedExpiry = DateFormat('dd/MM/yyyy HH:mm:ss').format(expiryDate);
  //       AppLogs.showInfoLogs("Expiry Date: $formattedExpiry");
  //
  //       // Check expired or not
  //       final isExpired =  expiryDate.isAfter(DateTime.now());
  //       final isSubscribed = !isExpired;
  //
  //       if (pastPurchases[i].status == PurchaseStatus.purchased) {
  //         final paidIndex =
  //         state.products.indexWhere((p) => p.id == purchasedProductId);
  //
  //         emit(state.copyWith(
  //           isSubscribed: isSubscribed,
  //           purchases: pastPurchases,
  //           selectedProductId: purchasedProductId,
  //           pastSubscriptionId: purchasedProductId,
  //           selectedItem: isSubscribed ? paidIndex : 0,
  //         ));
  //
  //         AppLogs.showInfoLogs(
  //           "${isSubscribed ? "βœ… Active" : "❌ Expired"} | productId: $purchasedProductId",
  //         );
  //
  //         break; // handle first valid purchase only
  //       }
  //     }
  //   }
  // }

}