<?php

require("../../../dbconnect.php");
require("../../../includes/functions.php");
require("../../../includes/gatewayfunctions.php");
require("../../../includes/invoicefunctions.php");
require_once("lib/Stripe.php");


if (isset($_SESSION['uid'])) {

   $whmcs_client_id = $_SESSION['uid'];
   $result = select_query("tblclients","gatewayid,email", array("id" => $whmcs_client_id));
   $customer_data = mysql_fetch_array($result);
   $gateway_id = $customer_data['gatewayid'];
   $cchash = md5($cc_encryption_hash.$whmcs_client_id);
   $email = $customer_data['email'];;
   global $CONFIG;
   $systemurl = ($CONFIG['SystemSSLURL']) ? $CONFIG['SystemSSLURL'].'/' : $CONFIG['SystemURL'].'/';

   $result = select_query("tblpaymentgateways","value", array("gateway" => "stripe","setting" => "secretKey"));
   $gateway_data = mysql_fetch_array($result);
   
   try {
	   Stripe::setApiKey($gateway_data['value']);
	   
	   $create_new_customer = true;
	   
	   if ($gateway_id != null && $gateway_id != '') {
	     try {
	       $stripe_customer = Stripe_Customer::retrieve($gateway_id);
	       $create_new_customer = false;
	       if ($stripe_customer->deleted) {
		       $create_new_customer = true;
	       }
	     }
	     catch (Exception $e) {
		   $create_new_customer = true;
	     }
	     
	   }
	   if ($create_new_customer) {
	       
		   $stripe_customer =  Stripe_Customer::create(array(
	                           "email" => $email,
	                           "card" => $_REQUEST['stripeToken']));
	     
	        $exp_date = $_REQUEST['card-exp-month'].substr($_REQUEST['card-exp-year'],-2);
	        full_query("UPDATE tblclients set expdate = AES_ENCRYPT('".$exp_date."','". $cchash. "') WHERE id = ". $whmcs_client_id);
	        update_query("tblclients", array("cardtype" => $stripe_customer->active_card->type, "gatewayid" =>$stripe_customer->id,"cardlastfour" => $stripe_customer->active_card->last4), array("id" => $whmcs_client_id));
	       
	   }
	   else {
		 // update existing customer  
		 $stripe_customer = Stripe_Customer::retrieve($gateway_id);
	     $stripe_customer->card = $_REQUEST['stripeToken'];
	     $stripe_customer->save();
	
	     $exp_date = $_REQUEST['card-exp-month'].substr($_REQUEST['card-exp-year'],-2);
	     full_query("UPDATE tblclients set expdate = AES_ENCRYPT('".$exp_date."','". $cchash. "') WHERE id = ". $whmcs_client_id);
	     update_query("tblclients", array("cardtype" => $stripe_customer->active_card->type, "gatewayid" =>$stripe_customer->id,"cardlastfour" => $stripe_customer->active_card->last4), array("id" => $whmcs_client_id));
	   
	   }
	   if (!isset($_POST['invoiceid'])) {
         header( 'Location: '.$systemurl.'clientarea.php?action=creditcard');
       }
   }
   catch(Exception $e) {
       $body = $e->getJsonBody();
       $error_message = $body["error"]["message"];
       $result = select_query("tblpaymentgateways","value", array("gateway" => "stripe","setting" => "name"));
       $gateway_name = mysql_fetch_array($result);
 	
       if (!isset($_POST['invoiceid'])) {
    	 logTransaction($gateway_name["value"],$error_message,"Error"); 
         header( 'Location: '.$systemurl.'clientarea.php?action=creditcard&error=1');
       }
	   else {
		   logTransaction($gateway_name["value"],$error_message,"Error"); 
		   echo "error";
	   }
   }
   

	
}



?>