<?php
// Enable error reporting for debugging
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
date_default_timezone_set('Asia/Kolkata');

require_once __DIR__ . '/vendor/autoload.php';

// Database configuration using environment variables for security
$hostname = '136.112.153.136'; 
$username = 'lac';
$password = 'kschhiKHSH23243#';
$database = 'lac_prod';

// Connect to the database
$db2 = new mysqli($hostname, $username, $password, $database);
if ($db2->connect_error) {
    die('Database connection error: ' . $db2->connect_error);
}
echo "1. LAC DB connected successfully!<br><br>";

// Google Client and Android Publisher configuration
$client = new Google_Client();
$client->setAuthConfig('api-8549026468989628459-243024-44764e4e3907.json');
$client->setScopes([Google_Service_AndroidPublisher::ANDROIDPUBLISHER]);
$service = new Google_Service_AndroidPublisher($client);

$date = new \DateTime();


// echo "================= Updating disputed ============<br><br>";

//  $updateWebhookQuery = "UPDATE gpay_webhooks SET disputed = '1', cron_status='1', status='1' WHERE (order_id='0' OR customer_id = '0') and disputed='0' ORDER BY id DESC LIMIT 10"; 
// 	mysqli_query($db2, $updateWebhookQuery);


echo "=================Entry Start From Here ============<br><br>";

// Query to get records within the last 3 minutes
//$query = "SELECT * FROM gpay_webhooks WHERE status='0' AND cron_status='0' AND purchase_type='0' AND customer_id > 0 ORDER BY id DESC LIMIT 50";
echo $query = "SELECT * FROM gpay_webhooks WHERE disputed = '0' AND status = '0' AND cron_status = '0' AND purchase_type = '0' AND created >= NOW() - INTERVAL 30 DAY ORDER BY id DESC LIMIT 20";

// echo $query = "SELECT * FROM gpay_webhooks WHERE id = '75'";


echo "<br><br>";
$result = mysqli_query($db2, $query);

writeLogs($result, 'log is enabled');

// Initialize the Google client
// $client = getGoogleClient(); // Assume this function returns an authenticated Google client
$service = new Google_Service_AndroidPublisher($client);
if(mysqli_num_rows($result) > 0 ){

 while ($row = mysqli_fetch_assoc($result)) {
	$grace = 0;
	$freeplanPrice = 0;;
    $packageName ='com.maz.combo587';
    $productId = $row['package'];
    $purchaseToken = $row['purchase_token'];
    $developerPayload = ''; // Adjust if you have a developer payload
    $gpaId = $row['gpa_id'];
    $orderId = $row['order_id'];
    $userId = $row['customer_id'];

    $orderId = substr($orderId, 0, 9);
    // echo '<pre>'; print_r($purchaseToken); die('HERE');
    try {                
        if($purchaseToken != '') {
              if($row['type'] == "subscription" && $row['noti_type'] == 4){ 
				echo "======================= I am in subscription purchase======================<br><br>";
                $acknowledgeRequest = new Google_Service_AndroidPublisher_SubscriptionPurchasesAcknowledgeRequest();
                echo "hiiii";
                $acknowledgeRequest->setDeveloperPayload($developerPayload);
                $response = $service->purchases_subscriptions->acknowledge($packageName, $productId, $purchaseToken, $acknowledgeRequest);
                echo "byeeee";
            }elseif($row['type'] == "subscription" && $row['noti_type'] == 3){ 
				echo "<br><br> ======================= I am in subscription cancelled ======================<br><br>";
				$CancellAcknowledgeRequest = new Google_Service_AndroidPublisher_SubscriptionPurchasesAcknowledgeRequest();
                $CancellAcknowledgeRequest->setDeveloperPayload($developerPayload);
                $CancellResponse = $service->purchases_subscriptions->acknowledge($packageName, $productId, $purchaseToken, $CancellAcknowledgeRequest);
                
                echo "<pre>";
                print_r($CancellResponse);
                
						echo "Webhook Record id Is => ".$row['id']." and order id is =>".$orderId." and gpa id is ".$gpaId;
						echo "<br><br>";
					// Do cancellation
						$cancelGpayId = $gpaId;
						if (($pos = strpos($gpaId, '..')) !== false) {
							$cancelGpayId = substr($gpaId, 0, $pos);
						}

						// Build cancellation query
						echo $cancellQuenry = "SELECT id FROM tbl_customer_subscriptions WHERE order_id='$orderId' AND subscriber_id='$userId' AND trans_id='$cancelGpayId' AND status='2' LIMIT 1";
						echo "<br><br>";

						// Execute query
						$cancelresult = mysqli_query($db2, $cancellQuenry);
 
						if ($cancelresult) {
							$cancelrow = mysqli_fetch_assoc($cancelresult);
							if ($cancelrow) {
								$cancelSubscriptionId = intval($cancelrow['id']);
								echo "Subscription ID to cancel: $cancelSubscriptionId<br><br>";

								// Update subscription status
								$CancellUpdateQuery = "UPDATE tbl_customer_subscriptions SET status='3',is_cancelled='1',cancelled_at=NOW() WHERE id='$cancelSubscriptionId'";
								if (mysqli_query($db2, $CancellUpdateQuery)) {
									echo "Subscription ID $cancelSubscriptionId cancelled successfully.<br><br>";
									
									 $OrderUpdateSql = "UPDATE `tbl_order` SET payment_status='4' WHERE id='".$orderId."'";
									 mysqli_query($db2, $OrderUpdateSql);
									
								}
							}
						}

						// update webhook 
						$updateWebhookQuery = "UPDATE gpay_webhooks SET cron_status='1', status='1' WHERE id='".$row['id']."' LIMIT 1";

						if (mysqli_query($db2, $updateWebhookQuery)) {
							echo "Webhook ID ".$row['id']." updated successfully.<br><br>";
						}

						continue;

            }elseif($row['type'] == "subscription" && $row['noti_type'] == 2){
				echo "<br><br>======================= I am in subscription Renew ==================<br><br>";
				echo "Webhook tbl Record Id is => ".$row['id']." and order_id is => ".$orderId." and GPA ID is => ".$gpaId;
				echo "<br><br>";
				
				// Do ACKNOLEDGE //
				$RenewAcknowledgeRequest = new Google_Service_AndroidPublisher_SubscriptionPurchasesAcknowledgeRequest();
                $RenewAcknowledgeRequest->setDeveloperPayload($developerPayload);
                $RenewResponse = $service->purchases_subscriptions->acknowledge($packageName, $productId, $purchaseToken, $RenewAcknowledgeRequest);
                // GET PLAN ID FOR THE CUSTOMER //
                
                echo  $pckIdQuery  = "select package_id from tbl_customer_subscriptions where order_id='".$orderId."' order by id desc limit 1"; 
                echo "<br><br>";
					 $packIdResult = mysqli_query($db2, $pckIdQuery);
					 if ($packIdResult) {
					     $packIdRow = mysqli_fetch_assoc($packIdResult);
						 if ($packIdRow) {
							 
							 $PackId = $packIdRow['package_id'];
							 
							 if ($PackId !=""){
								 
								$planIdQuery = "SELECT id, inapp_recurrng_planid FROM tbl_packages WHERE id='" . $PackId . "' ";  // earlier it was recuring_inappplan_id i have changed on feb 9 26 = dk
								$planIdRes = mysqli_query($db2, $planIdQuery);
								$planIdRow = mysqli_fetch_assoc($planIdRes);

								$planID = $planIdRow['inapp_recurrng_planid'];  // recuring_inappplan_id
								
								 $resultGoogle = $service->purchases_subscriptions->get($packageName, $planID, $purchaseToken);  // Extract Purchase TOken
								echo "<pre>";
								print_r($resultGoogle);
								
								  if ($resultGoogle->acknowledgementState == 1 && $resultGoogle->paymentState == 1 && $resultGoogle->expiryTimeMillis) {
									  
										 $expiredate = $resultGoogle->expiryTimeMillis;
										$timestampMilliseconds = $expiredate;
										$timestampSeconds = $timestampMilliseconds / 1000.0;
										$date->setTimestamp((int)$timestampSeconds);
										// $date->modify('+2 days');
										 $enddate = $date->format('Y-m-d H:i:s');               
										 $GoogleGpayId = $resultGoogle->orderId;
										 $GoogleAmount = $resultGoogle->priceAmountMicros / 1000000 ;
										 $GoogleMTVOrderID = $resultGoogle->obfuscatedExternalAccountId;
										 $GoogleMTVOrderID = substr($GoogleMTVOrderID, 0, 9);
										 $GoogleMTVCustomerId = $resultGoogle->obfuscatedExternalProfileId;
										
										echo "CUSTOMER GOOGLE = ".$GoogleMTVCustomerId."<br>";
										echo "CUSTOMER WEBHOOK = ".$userId." <br>";
										echo "GPAY GOOGLE = ".$GoogleGpayId."<br>";
										echo "GPAY WEBHHOK = ".$gpaId." <br>";
										echo "ORDER GOOGLE = ".$GoogleMTVOrderID."<br>";
										echo "ORDER WEBHOOK = ".$orderId."<br><br>";
										echo "Google Amount = ".$GoogleAmount."<br><br>";
										
						if($GoogleGpayId !="" &&  $GoogleMTVCustomerId !="" && $enddate !="" && $GoogleMTVOrderID !=""){
						  
							$TrimmedGpayId = $GoogleGpayId;
							if (($pos = strpos($GoogleGpayId, '..')) !== false) {
								$TrimmedGpayId = substr($GoogleGpayId, 0, $pos);
							}
							
							$pgData = json_encode($resultGoogle);
						echo $RenewQuenry = "SELECT * FROM tbl_customer_subscriptions WHERE order_id='$GoogleMTVOrderID' AND subscriber_id='$GoogleMTVCustomerId' AND trans_id='$TrimmedGpayId' order by id desc LIMIT 1";
					    echo "<br><br>";
						     $RenewResult = mysqli_query($db2, $RenewQuenry);
						     if ($RenewResult) {
								$RenewRow = mysqli_fetch_assoc($RenewResult);
								 if ($RenewRow) {
									 
									 //echo "<pre>";
										//print_r($RenewRow);
	
										// writeLogs($RenewRow, 'enter in the renew block');

								 		if ($RenewRow['package_id'] == 170) {
										   
											writeLogs($RenewRow['package_id'], 'getting renew package id for 170');
										   
											$end_timestamp = strtotime($enddate);
										   
											writeLogs($end_timestamp, 'getting renew package end_date');
										   
											$start_date = date('Y-m-d H:i:s', strtotime('-7 days', $end_timestamp));
										   
											writeLogs($start_date, 'getting renew package if_start_date');
										} else {
										    $start_date = $RenewRow['end_date'];
											writeLogs($start_date, 'getting renew package else_start_date');
										}

										if ($start_date && strtotime($start_date) !== false && date('Y-m-d', strtotime($start_date)) === date('Y-m-d')) {
										    $RenewRow['back_dated'] = 0;
										    $RenewRow['created'] = date('Y-m-d H:i:s'); // current timestamp
											writeLogs($RenewRow['back_dated'], 'getting renew package if_back_dated');
											writeLogs($RenewRow['created'], 'getting renew package if_created');
										} else {
										    $RenewRow['back_dated'] = 1;
										    $RenewRow['created'] = $start_date; // backdated created time
											writeLogs($RenewRow['back_dated'], 'getting renew package else_back_dated');
											writeLogs($RenewRow['created'], 'getting renew package else_created');
										}
										
										writeLogs($RenewRow['back_dated'], 'getting renew back_dated outside of the block');
										writeLogs($RenewRow['created'], 'getting renew created outside of the block');
										writeLogs("--------", '----------');

										if($RenewRow['status'] !='2'){
										echo $insertRenewalQuery = "
										INSERT INTO tbl_customer_subscriptions (
											app_id, order_id,
											trans_id, pg_ref_id, device_id, gateway_subscription_id, pg_payment_data, channel, package_id,
											package_title, package_code, package_type, package_mode, price,  basic_amount, tax_amt,
											subscriber_id, msisdn, role_type, gateway_type, pg_name, region_type, local_user, state_code,
											period, period_interval, trial_period, trial_length, subscription_type, output_video_limit,
											additional_cost_per_unit, no_videos, no_plays, status, platform,purchase_type, extended_status, start_date, end_date,
											autorenew, currency_id, currency, created, updated_at, is_cancelled,
											deactivation_type,  recurring,
											purchase_token, package_name, back_dated
										)
										VALUES (
											'{$RenewRow['app_id']}', '{$RenewRow['order_id']}', 
											'{$TrimmedGpayId}', '{$TrimmedGpayId}', '{$RenewRow['device_id']}', '{$GoogleGpayId}', '".$pgData."', '{$RenewRow['channel']}', '{$RenewRow['package_id']}',
											'{$RenewRow['package_title']}', '{$RenewRow['package_code']}', '{$RenewRow['package_type']}', '{$RenewRow['package_mode']}', '{$GoogleAmount}', '{$RenewRow['basic_amount']}', '{$RenewRow['tax_amt']}',
											'{$RenewRow['subscriber_id']}', '{$RenewRow['msisdn']}', '{$RenewRow['role_type']}', '{$RenewRow['gateway_type']}', '{$RenewRow['pg_name']}', '{$RenewRow['region_type']}', '{$RenewRow['local_user']}', '{$RenewRow['state_code']}',
											'{$RenewRow['period']}', '{$RenewRow['period_interval']}', '{$RenewRow['trial_period']}', '{$RenewRow['trial_length']}', '5', '{$RenewRow['output_video_limit']}',
											'{$RenewRow['additional_cost_per_unit']}', '{$RenewRow['no_videos']}', '{$RenewRow['no_plays']}', '2', 'Webhook', 'RENEWED','{$RenewRow['extended_status']}', '{$start_date}', '$enddate',
											'{$RenewRow['autorenew']}', '{$RenewRow['currency_id']}', '{$RenewRow['currency']}', '{$RenewRow['created']}', NOW(), '{$RenewRow['is_cancelled']}',
											'{$RenewRow['deactivation_type']}','{$RenewRow['recurring']}',
											'{$RenewRow['purchase_token']}', '{$RenewRow['package_name']}','{$RenewRow['back_dated']}'
										)
									";

									if (mysqli_query($db2, $insertRenewalQuery)) {
										echo "✅ New renewal record inserted successfully.<br><br>";
									} else {
										echo "❌ Error inserting renewal record: " . mysqli_error($db2) . "<br><br>";
									}
																
																
									}else{
										echo "✅ New renewal record already inserted by cron.<br><br>";
										
										}

								// update webhhok table
								
									$updateWebhookQuery = "UPDATE gpay_webhooks SET cron_status='1', status='1' WHERE id='".$row['id']."' LIMIT 1";

									if (mysqli_query($db2, $updateWebhookQuery)) {
										echo "Mark this record as processed in gpay_webhooks.<br><br>";
									} 
								
								 }
								 
							 }
										  
						   }
						}
					}
						 }else{
							 $updateWebhookQuery = "UPDATE gpay_webhooks SET cron_status='1',disputed='1' , status='1' WHERE id='".$row['id']."' LIMIT 1";

							 mysqli_query($db2, $updateWebhookQuery);
																				
																				
							 echo "No Records Available in TCS table with order id is ".$orderId." and GPA ID is ".$gpaId."<br><br>Hence DATA is Dsiputed Need to Do Something For this <br><br>========================================================================<br><br>";
						 
							continue;
							 
							 }
					 }else{
						 
						     $updateWebhookQuery = "UPDATE gpay_webhooks SET cron_status='1',disputed='1' , status='1' WHERE id='".$row['id']."' LIMIT 1";

							 mysqli_query($db2, $updateWebhookQuery);
							 
						 echo "No Records Available in TCS table with order id is ".$orderId." and GPA ID is ".$gpaId."<br><br>Hence DATA is Dsiputed Need to Do Something For this <br><br>========================================================================<br><br>";
						 
						 continue;
						 
						 }
                

								

								
					
					
				continue;
					
				}elseif($row['type'] == "subscription" && $row['noti_type'] == 13){
					
					echo "<br><br>======================= I AM IN SUBSCRIPTION EXPIRE ==================<br><br>";
					
											$TrimmedGpayId = $gpaId;
											if (($pos = strpos($gpaId, '..')) !== false) {
												$TrimmedGpayId = substr($gpaId, 0, $pos);
											}
					
					
					echo "Webhook tbl Record Id is => ".$row['id']." and order_id is => ".$orderId." and GPA ID is => ".$gpaId;
					echo "<br><br>";
					
					 echo  $pckIdQuery  = "select package_id from tbl_customer_subscriptions where order_id='".$orderId."' order by id desc limit 1"; 
					 echo "<br><br>";
					 $packIdResult = mysqli_query($db2, $pckIdQuery);
					 if ($packIdResult) {
					     $packIdRow = mysqli_fetch_assoc($packIdResult);
					     if ($packIdRow) {
							 
							 $PackId = $packIdRow['package_id'];
							 if ($PackId !=""){
								 
								$planIdQuery = "SELECT id, recuring_inappplan_id FROM tbl_packages WHERE id='" . $PackId . "' ";
								$planIdRes = mysqli_query($db2, $planIdQuery);
								$planIdRow = mysqli_fetch_assoc($planIdRes);

								$planID = $planIdRow['recuring_inappplan_id'];
								$resultGoogle = $service->purchases_subscriptions->get($packageName, $planID, $purchaseToken); 
								echo "<pre>";
								print_r($resultGoogle);
								
								if (empty($resultGoogle['autoRenewing']) && $resultGoogle['expiryTimeMillis'] < round(microtime(true) * 1000)) {
									
									echo "do expire here <br><br>";
									 echo  $SubsUpdateSql = "UPDATE `tbl_customer_subscriptions` SET status='7' WHERE status IN('2','3') and order_id='".$orderId."' and subscriber_id='".$userId."' and trans_id='".$TrimmedGpayId."' limit 1";
										mysqli_query($db2, $SubsUpdateSql);
										
										$updateWebhookQuery = "UPDATE gpay_webhooks SET cron_status='1', status='1' WHERE id='".$row['id']."' LIMIT 1";

										mysqli_query($db2, $updateWebhookQuery);
										
										echo "<br><br>";
										echo "Webhook tbl Record Id is => ".$row['id']." and order_id is => ".$orderId." and GPA ID is => ".$gpaId." is Expired Successfully<br><br>";
								}
								
								
								
								
								
								
							}
							 
						 }else{
							 
							 
							 $updateWebhookQuery = "UPDATE gpay_webhooks SET disputed = '1', cron_status='1', status='1' WHERE id='".$row['id']."' LIMIT 1";

							 mysqli_query($db2, $updateWebhookQuery);
							 
							 echo "No Record Found in TCS to Expire Order id is => ".$orderId." gpaId is =>".$gpaId;
							 
							 }
					     
					 }else{
						 
						 $updateWebhookQuery = "UPDATE gpay_webhooks SET disputed = '1', cron_status='1', status='1' WHERE id='".$row['id']."' LIMIT 1";

							 mysqli_query($db2, $updateWebhookQuery);
						 
						 echo "No Record Found in TCS to Expire Order id is => ".$orderId." gpaId is =>".$gpaId;
						 
						 }
					
					
					 
					
					//$expSQL := "select * from tbl_customer_subscriptions where order_id='".$orderId."' and subscriber_id='".$userId."' trans";	
					
					continue;
				}elseif($row['type'] == "onetime") {
				echo "<br><br>======================= I AM IN ONE TIME PURCHASE ==================<br><br>";
				echo "Webhook tbl Record Id is => ".$row['id']." and order_id is => ".$orderId." and GPA ID is => ".$gpaId;
				echo "<br><br>";
                $acknowledgeRequest = new Google_Service_AndroidPublisher_ProductPurchasesAcknowledgeRequest();
                $acknowledgeRequest->setDeveloperPayload($developerPayload);
                $response = $service->purchases_products->acknowledge($packageName, $productId, $purchaseToken, $acknowledgeRequest);    
            }else{
				echo  "row id is => ".$row['id']." it is case of others may be  NOT IN('1','2','3','4','13') will work later here ..";
				echo "<br><br>";
				continue;
				}             

            // Check if the response status code is 204 (No Content)
            if ($response->getStatusCode() == 204 && $orderId > 0 && $userId > 0) {

                    // Check if order exists in DB
                    $orderSql = "SELECT OD.pg_ref_id, OD.item_id, OD.subscriber_id, OD.order_id, OD.item_name, OD.item_price, OD.role_type, OD.start_date, OD.end_date, OD.region_type, OD.igst_amt, OD.cgst_amt, OD.sgst_amt, OD.pg_name, OD.gateway_type, OD.autorenew, OD.currency_id, OD.currency, OD.updated_at, OD.package_mode, OD.device, OD.total FROM tbl_order AS O LEFT JOIN tbl_order_details AS OD ON OD.order_id=O.id WHERE O.id='".$orderId."' AND O.subscriber_id='".$userId."'";

                    $chkOrderQuery = mysqli_query($db2, $orderSql);
                    $checkOrderRow = mysqli_fetch_assoc($chkOrderQuery);                    

                    if (!empty($checkOrderRow)) {

                        $checkSubscription = "SELECT pg_ref_id FROM tbl_customer_subscriptions WHERE pg_ref_id='" . $row['gpa_id'] . "'";
                        $chkSubsQuery = mysqli_query($db2, $checkSubscription);
                        $checkSubsRow = mysqli_fetch_assoc($chkSubsQuery);
                        if(empty($checkSubsRow)) {

                        $orderPackageSql = "SELECT package_type, `period`, period_interval, cur_code, country_code, discount_amt, discounted_price FROM tbl_packages  WHERE id='" . $checkOrderRow['item_id'] . "'";
                        $chkPackageQuery = mysqli_query($db2, $orderPackageSql);
                        $checkPackageRow = mysqli_fetch_assoc($chkPackageQuery);

                        $customerSql = "SELECT first_name, last_name, email, `state`, contact_no, age, dob, country, contact_no FROM customers WHERE id='" . $checkOrderRow['subscriber_id'] . "'";
                        $chkCustomerQuery = mysqli_query($db2, $customerSql);
                        $checkCustomerRow = mysqli_fetch_assoc($chkCustomerQuery);
                            // Purchase_token and gateway_subs with dotss and pg_data and order_platform = webhook
                            try {

								$gpayPrice = ((float) $row['amount']) / 1000000;
								$gpayCurrency = $row['currency'];
								if ($gpayPrice <= 10 && $gpayCurrency == 'INR' && $row['type'] == "subscription" && $row['noti_type'] == 4) {
									$grace = 0; $start_time_date = null; $end_time_date = null;
									$checkFreePlan = "SELECT `free_trial`, `price` FROM tbl_packages WHERE inapp_recurrng_planid = '" . $row['package'] . "' ";
									$freePlanIdRes = mysqli_query($db2, $checkFreePlan);
									$freePlanIdRow = mysqli_fetch_assoc($freePlanIdRes);
									$freeplanID = $freePlanIdRow['free_trial'];
									$freeplanPrice = $freePlanIdRow['price'];
									if ($freeplanID != 0) { 
										$grace = 1; 
										$start_time_date = date('Y-m-d H:i:s');
										$end_time_date = date('Y-m-d H:i:s',strtotime("+$freeplanID days"));
									}
								}


								if ($grace > 0) {
									$checkOrderRow['start_date'] = $start_time_date;
									$checkOrderRow['end_date']   = $end_time_date;
									$checkOrderRow['created']    = $start_time_date;
									$checkOrderRow['item_price'] = $gpayPrice;
									$checkOrderRow['currency'] = $gpayCurrency;
									$checkOrderRow['autorenew'] = '1';
									$checkOrderRow['back_dated'] = 0;

									$updateOrderDetailsSql = "UPDATE tbl_order_details SET end_date='".$checkOrderRow['end_date']."' WHERE order_id = '".$checkOrderRow['order_id']."'";
									mysqli_query($db2, $updateOrderDetailsSql);

								} else {
									if (date('Y-m-d', strtotime($checkOrderRow['start_date'])) === date('Y-m-d')) {
										$checkOrderRow['back_dated'] = 0;
										$checkOrderRow['created'] = date('Y-m-d H:i:s');
										$checkOrderRow['item_price'] = $checkOrderRow['item_price'];
										$checkOrderRow['currency'] = $checkOrderRow['currency'];
									} else {
										$checkOrderRow['back_dated'] = 1;
										$checkOrderRow['created'] = $checkOrderRow['start_date'];
										$checkOrderRow['item_price'] = $checkOrderRow['item_price'];
										$checkOrderRow['currency'] = $checkOrderRow['currency'];
									}
								}

                                $createdDate = date('Y-m-d H:i:s');
                              echo   $query_ocs = "INSERT INTO `tbl_customer_subscriptions` (`app_id`, `order_id`, `trans_id`, `pg_ref_id`, `gateway_subscription_id`, `pg_payment_data`, `channel`, `package_id`, `package_title`, `package_code`, `package_type`, `package_mode`, `price`, `basic_amount`, `tax_amt`, `subscriber_id`, `msisdn`, `role_type`, `gateway_type`, `pg_name`, `region_type`, `local_user`, `state_code`, `period`, `period_interval`, `trial_period`, `trial_length`, `subscription_type`, `output_video_limit`, `additional_cost_per_unit`, `no_videos`, `no_plays`, `status`, `extended_status`, `start_date`, `end_date`, `autorenew`, `currency_id`, `currency`, `created`, `is_cancelled`, `cancelled_at`, `deactivation_type`, `deactivation_date`, `renewal_date`, `platform`, `purchase_token`,`back_dated`, `device_id`) VALUES (5013, '" . $checkOrderRow['order_id'] . "','" . $gpaId . "', '" . $gpaId . "', '" . $gpaId . "', '".json_encode($response)."', '', '" . $checkOrderRow['item_id'] . "', '" . $checkOrderRow['item_name'] . "', '', 3, '" . $checkOrderRow['package_mode'] . "','" . $checkOrderRow['item_price']. "','" . $freeplanPrice  . "', '0','" . $checkOrderRow['subscriber_id'] . "', '', 1, '" . $checkOrderRow['gateway_type'] . "', '" . $checkOrderRow['pg_name']. "', 0, 0, 0, '".$checkPackageRow['period']."', '".$checkPackageRow['period_interval']."', '', 0, 0, 0, 0, 0, 0,'2', 0, '" . $checkOrderRow['start_date'] . "', '" . $checkOrderRow['end_date'] . "',".$checkOrderRow['autorenew'].", ".$checkOrderRow['currency_id'].", '" . $checkOrderRow['currency'] . "', '" . $checkOrderRow['created'] . "', 0, '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00','Webhook', '".$purchaseToken."', '".$checkOrderRow['back_dated']."', '". $grace ."')";
                                     echo $query_ocs.'<br><br>';
                                    mysqli_query($db2, $query_ocs);  

                                    // Generate invoice
                                    $RandomNumber = rand(100000, 999999);
                                    $invNo = "INV1000198" . $RandomNumber;
                                    $address = isset($checkCustomerRow['state']) ? $checkCustomerRow['state']: '';                
                                    $phone_number = isset($checkCustomerRow['contact_no']) ? $checkCustomerRow['contact_no'] : '';
                                    $name = isset($checkCustomerRow['first_name']) ? $checkCustomerRow['first_name'] : '';
                                    $email = isset($checkCustomerRow['email']) ? $checkCustomerRow['email'] : '';
                                    $query_orin = "INSERT INTO `tbl_invoices` (`invoice_number`, `order_id`, `app_id`, `package_title`, `subscriber_id`, `subscriber_name`, `subscriber_email`, `subscriber_address`, `subscriber_contact`, `currency`, `sub_total`, `state_code`, `region_type`, `igst`, `cgst`, `sgst`, `tax_title`, `tax_rate_per`, `discount`, `ncf_amt`, `total_amount`, `role_type`, `local_user`, `tax_deduct_val`, `total_recieved_amt`, `created_date`) VALUES ('" . $invNo . "','" . $checkOrderRow['order_id'] . "', 5013, '".$checkOrderRow['item_name']."', '" . $checkOrderRow['subscriber_id'] . "', '" . $name . "', '" . $email . "', '" . $address . "', '" . $phone_number . "','" . $checkOrderRow['currency'] . "', '" . $checkOrderRow['item_price'] . "', 0, 0, '" . $checkOrderRow['igst_amt'] . "','" . $checkOrderRow['cgst_amt'] . "','" . $checkOrderRow['sgst_amt'] . "', '', '0.00', '0','0.00','" . $checkOrderRow['item_price'] . "', 1, 0, 0.00,'" . $checkOrderRow['item_price'] . "', '" . $checkOrderRow['updated_at'] . "')";
                                    // echo $query_orin.'<br><br>';    
                                    mysqli_query($db2, $query_orin);
                                    echo '--ACK Order Done! Acknowledgement successful.<br><br>';

                                    $updateOrderSql = "UPDATE tbl_order SET payment_status='2', order_status='2' WHERE id='".$checkOrderRow['order_id']."'";
                                    // echo $updateOrderSql.'<br><br>';
                                    mysqli_query($db2, $updateOrderSql);

                                    $updateSql = "UPDATE gpay_webhooks SET status='1', cron_status='1', ack_type='1' WHERE id='".$row['id']."'";
                                    // echo $updateSql.'<br><br>';
                                    mysqli_query($db2, $updateSql);
                            } catch (Google_Service_Exception $e) {
                                // Error handling for Google_Service_Exception
                                echo '--Error acknowledging one-time purchase: ' . $e->getMessage();
                            }                           
                        } else {
                            $updateSql = "UPDATE gpay_webhooks SET status='1', ack_type='1' WHERE id='".$row['id']."'";
                            mysqli_query($db2, $updateSql);
                        }
                     }                 
                    }
                    echo "<br>";
                    echo "i am also here ...";    
                    echo "<br>";
                    echo $response->getStatusCode(). "------". $orderId ."---------". $userId;                     
            } else {
                echo '--Unexpected response status: ' . $response->getStatusCode().'<br><br>';
            }        
    } catch (Google_Service_Exception $e) {
        
        
			if (strpos($e->getMessage(), 'not owned by the user') !== false) {
				//echo $row['id'].' Refunded, No Need to process<br><br>';

				$cancelGpayId = $gpaId;
				if (($pos = strpos($gpaId, '..')) !== false) {
					$cancelGpayId = substr($gpaId, 0, $pos);
				}

				echo $checkForCancel = "SELECT id,status FROM tbl_customer_subscriptions WHERE order_id='$orderId' AND subscriber_id='$userId' AND trans_id='$cancelGpayId' AND status='3' LIMIT 1";
				echo "<br><br>";

					$checkQuery = mysqli_query($db2, $checkForCancel);
					$checkCount = mysqli_fetch_assoc($checkQuery);
				if ($checkCount) {
						echo "Subscription already cancelled by CRON as it was refunded, order id is = ".$orderId."<br><br>";
				}else{
					
						echo $RefundQuery = "UPDATE tbl_customer_subscriptions SET status='3',is_cancelled='1',platform='webhook', end_date=NOW(),cancelled_at=NOW() WHERE trans_id='".$cancelGpayId."' AND subscriber_id='".$userId."' AND order_id='".$orderId."' AND status IN('2','3') limit 1";
						echo "<br><br>";
				if (mysqli_query($db2, $RefundQuery)) {
					 $OrderUpdateSql = "UPDATE `tbl_order` SET payment_status='4' WHERE id='".$orderId."'";
					 mysqli_query($db2, $OrderUpdateSql);
					 
					 echo "Subscription cancelled successfully as it was refunded, order id is = ".$orderId."<br><br>";
					
				} 
					}	
								
			

			} else {
				echo $row['id'].' ----Error acknowledging one-time purchase: ' . $e->getMessage().'<br><br>';
			}

			// Always mark webhook as processed to avoid retry loop
			$updateWebhookQuery = "UPDATE gpay_webhooks SET cron_status='1', status='1' WHERE id='".$row['id']."' LIMIT 1";

			if (mysqli_query($db2, $updateWebhookQuery)) {
				echo "Closing this record as this could be refunded.<br><br>";
				echo $row['id'];
			} 
    } 
 }
} else {
    echo "No Data Available";
}



function writeLogs($data, $message = '')
{
    $logFile = __DIR__ . '/google_renewal_log.txt'; 

    $timestamp = date('Y-m-d H:i:s');
    $logEntry = "[" . $timestamp . "] " . $message . " | " . json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . PHP_EOL;

    file_put_contents($logFile, $logEntry, FILE_APPEND);
}





mysqli_close($db2);
?>
