<?php
session_start();
if(empty($_SESSION['tri'])) {$_SESSION['tri']=0;}
$_SESSION['tri']++;

if(empty($_SESSION['koszyk_id']) && empty($_SESSION['pay_id']) ) { die('no_kid or payment');}
if(strlen($_SESSION['koszyk_id'])> 10)
{$kid=$_SESSION['koszyk_id'];} else{$kid=$_SESSION['pay_id'];}
$t = parse_ini_file(__DIR__ . '/../../time.php', true);
$today1=getdate();
$lnk = mysqli_connect($t['base']['host'],$t['base']['user'],$t['base']['pass'],$t['base']['db']) 
or die(var_dump($t));

mysqli_set_charset($lnk,'utf8mb4');

$cid=mysqli_real_escape_string($lnk,$kid);
if($_SESSION['tri']>4) { 
	$d1="delete from c2orders where order_number='$kid'";
	mysqli_query($lnk,$d1) ;
	$message.="deleted  ".mysqli_affected_rows($lnk)." entries from orders <br>";
	$d2="delete from c2reg where order_number='$cid'";
	mysqli_query($lnk,$d2);
	$message.="released  ".mysqli_affected_rows($lnk)." entries from registration<br>";
	$_SESSION=array(); session_destroy();
	   echo "Your session expired, $message , <a href='/programs/' >go back</a>";die();                                                     }
$r=mysqli_fetch_row(mysqli_query($lnk,"select sum(price),sum(price+tax),sum(tax),count(*) from cart1 where cid='$cid'")) or die('q0');
$price=$r[0]?:0;$tot=$r[1]?:0;$tax=$r[2]?:0;$ile=$r[3]?:0;

$err='';$ids=[];$items=[];
$rs=mysqli_query($lnk,"select id,pid,course_name,fname,lname,price from cart1 where cid='$cid' order by pid,id") or die('cart');

while($r=mysqli_fetch_row($rs)){
  $id=$r[0];$pid=$r[1];$crs=$r[2];$fn=$r[3];$ln=$r[4];$pr=$r[5];
  $f=mysqli_real_escape_string($lnk,$fn);$l=mysqli_real_escape_string($lnk,$ln);
  $d=mysqli_fetch_row(mysqli_query($lnk,"select count(*) from c2reg where program_id=$pid and registrant_first_name='$f' and registrant_last_name='$l'")) or die('dup');
  //if($d[0]>0)$err.=$fn." ".$ln." already in ".$crs."\n";
  $items[]=["url"=>"","description"=>$crs." - ".$fn." ".$ln,"product_code"=>$pid,"unit_cost"=>number_format($pr,2,'.',''),"quantity"=>1];
  $ids[]=$id;
}

if($err!='') die("cart_err\n".$err);

$tax_rate='';if($price>0)$tax_rate=number_format(($tax/$price)*100,3,'.','');
$cart=["items"=>$items,"subtotal"=>number_format($price,2,'.',''),"tax"=>["amount"=>number_format($tax,2,'.',''),"description"=>"tax","rate"=>$tax_rate]];

/* payload */
$pay=[
  "order_no"=>$cid,
  "amount"=>number_format($tot,2,'.',''),
  "currency"=>"CAD",
  "language"=>"en",
  "cart"=>$cart
];
if(strlen($_SESSION['koszyk_id'])> 20)
{//move to orders + regs 
mysqli_query($lnk,"insert into c2orders (mijireh_id,customer_name,customer_email,customer_phone,customer_address,order_date,order_amount,order_tax,order_number,payment_type,order_status) values ('mn','cost','email','','full_address',now(),'$tot','$tax','$cid','','')") or die('q5');

foreach($ids as $i){
  mysqli_query($lnk,"insert into c2reg (program_id,ledger_number,registrant_first_name,registrant_last_name,registrant_emergency_contact,registrant_dob,registration_date,order_number,item_amount,item_tax,registration_status) select pid,ledger,fname,lname,em,bday,time,cid,price,tax,'notCONFIRMED' from cart1 where id=$i") or die('in');
}

mysqli_query($lnk,"insert into exp values('','$cid',unix_timestamp()+300,'')") or die('exp');
$_SESSION['pay_id']=$_SESSION['koszyk_id'];
unset($_SESSION['koszyk_id']);}

$store_id    =$t['mn']['id'];
$api_token   = $t['mn']['key'];
$checkout_id = $t['mn']['checkout_id'];
$environment = "qa"; // qa or prod

$url = "https://gatewayt.moneris.com/chkt/request/request.php";

$payload = [
    "store_id"    => $store_id,
    "api_token"   => $api_token,
    "checkout_id" => $checkout_id,
    //"txn_total"   =>number_format($tot,2,'.',''),
    "txn_total"   =>"10.25",
   "cust_id"    => $kid,
    "environment" => $environment,
    "action"      => "preload",
    "cart"=>$cart
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_HTTPHEADER     => ["Content-Type: application/json"]
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
$ticket=null;
$ticket = $data['response']['ticket'] ;

if (!$ticket) {var_dump($payload);
    die("Unable to initialize payment.");
}
?>

<!doctype html>
<html lang="en">

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<!-- Latest commit from GitHub -->
	 
	 <script src="https://gatewayt.moneris.com/chkt/js/chkt_v1.00.js"></script>
	
</head>

<body id="top">
	
	
	
	<main>
	<section>
 <div id="monerisCheckout"></div>
                                                
		
</section>		
	</main>
	
	<script>
var myCheckout = new monerisCheckout();
myCheckout.setMode("qa");
myCheckout.setCheckoutDiv("monerisCheckout");

// Set the error callback
myCheckout.setCallback("error_event", myErrorEvent);
myCheckout.setCallback("payment_complete", myPaymentComplete);

function myErrorEvent(errorResponse) {
    var response = JSON.parse(errorResponse);
    console.error("Moneris Error:", response.response_code);

    // 1. Close the failed checkout instance
    myCheckout.closeCheckout();

    // 2. Notify the user and offer a retry
    alert("A processing error occurred. Please click 'Retry' to attempt the payment again.");

    // 3. Logic to retry: You MUST generate a NEW ticket from your server
    // Example: Redirect back to your payment initiation page or call an AJAX 
    // function that runs your PHP Preload script again.
    window.location.reload(); 
}
function myPaymentComplete(response) {
    var data = JSON.parse(response);
    // Redirect to receipt.php to check the result
    window.location.href = "rc.php?ticket=" + data.ticket;
}
myCheckout.startCheckout("<?php echo $ticket; ?>");
</script>
</body>

</html>

