<?php
/**
* Capturador de IPN
*
* @author    Kijam.com <info@kijam.com>
* @copyright 2014 Kijam.com
* @license   Comercial
*/

header('Content-type: text/plain');

include(dirname(__FILE__).'/../../config/config.inc.php');
include(_PS_ROOT_DIR_.'/init.php');
error_reporting(E_ALL);
ini_set('display_errors', 1);
include(dirname(__FILE__).'/paymentskrill.php');

$payment = new PaymentSkrill();

PaymentSkrill::log('IPN: '.print_r($_GET, true).print_r($_POST, true));

if (empty(PaymentSkrill::$skrill_marchent_email) || empty(PaymentSkrill::$skrill_marchent_mqi_secret))
	die('Module not installed');

if (!Tools::getValue('transaction_id'))
	die('transaction_id not found');

$result = $payment->validateSkrill(Tools::getValue('transaction_id'));

if ($result && is_array($result) && $result['status'] && $result['cart_id'])
{
	$id_cart = (int)$result['cart_id'];
	$cart = new Cart($id_cart);
	if (!Validate::isLoadedObject($cart))
		exit;

	$currency = new Currency((int)$cart->id_currency);
	$customer = new Customer((int)$cart->id_customer);

	$status_act = $result['status'];

	$id_order = Order::getOrderByCartId($id_cart);
	$currency = new Currency((int)$cart->id_currency);

	$context = Context::getContext();
	$context->cart = $cart;
	$context->cookie->id_currency = (int)$cart->id_currency;
	$context->customer = $customer;
	$context->currency = $currency;
	$order = false;

	$diffmsj = '';
	$fee = 100.0 / (100.0 - (float)PaymentSkrill::$skrill_fee);
	$skrill_fee_trans = $payment->get_rate('EUR', Tools::strtoupper($currency->iso_code)) * PaymentSkrill::$skrill_fee_trans;
	$total_order = $cart->getOrderTotal(true, Cart::BOTH);
	$total = Tools::ps_round($fee * $total_order + (float)$skrill_fee_trans, 2);
	$total_fee = $total - $total_order;
	$diff = abs($total - $payment->get_rate($result['currency'], Tools::strtoupper($currency->iso_code)) * $result['price_skrill']);
	$same_cur = Tools::strtoupper($result['currency']) == Tools::strtoupper($currency->iso_code);
	if ($same_cur && $diff > $total * 0.01 || !$same_cur && $diff > $total * 0.05)
	{
		$status_act = Configuration::get('SKRILL_OS_REFUSED');
		$diffmsj = "Maybe Hacking HTML Price (Price Diff: {$diff} {$currency->iso_code})\n\n";
	}

	if ($id_order > 0)
	{
		$order = new Order($id_order);
		$order->setCurrentState($status_act);
		if ($diffmsj != '')
		{
			$message = new Message();
			$message->id_customer = (int)$order->id_customer;
			$message->message = $diffmsj;
			$message->id_order = (int)$order->id;
			$message->private = true;
			$message->add();
		}
	}
	else
		$payment->validateOrder($id_cart, $status_act, $cart->getOrderTotal(true, Cart::BOTH),
								$payment->displayName,
								"{$diffmsj}Transaction ID: ".Tools::getValue('transaction_id')."\nWithout Fee: {$total_order} {$currency->iso_code}\nFee: {$total_fee} {$currency->iso_code}\nTotal Payment: {$result['price_skrill']} {$result['currency']}", array(),
								null, false, $customer->secure_key);

	if (!$order || !Validate::isLoadedObject($order))
		$order = new Order(Order::getOrderByCartId($id_cart));

	if (Validate::isLoadedObject($order))
		Db::getInstance()->Execute('INSERT INTO `'._DB_PREFIX_.'skrill_status` (id_order, transaction_id, status, next_retry)
						VALUES
						('.$order->id.', \''.pSQL(Tools::getValue('transaction_id')).'\', '.$order->getCurrentState().', '.(time() + 6 * 60 * 60).')');
	exit;
}
