<?php
/**
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the GNU General Public License (GPL 3)
 * that is bundled with this package in the file LICENSE.txt
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Payone_Core to newer
 * versions in the future. If you wish to customize Payone_Core for your
 * needs please refer to http://www.payone.de for more information.
 *
 * @category        Payone
 * @package         Payone_Core_Model
 * @subpackage      Observer
 * @copyright       Copyright (c) 2012 <info@noovias.com> - www.noovias.com
 * @author          Matthias Walter <info@noovias.com>
 * @license         <http://www.gnu.org/licenses/> GNU General Public License (GPL 3)
 * @link            http://www.noovias.com
 */

/**
 *
 * @category        Payone
 * @package         Payone_Core_Model
 * @subpackage      Observer
 * @copyright       Copyright (c) 2017 <kontakt@fatchip.de> - www.fatchip.com
 * @license         <http://www.gnu.org/licenses/> GNU General Public License (GPL 3)
 * @link            http://www.fatchip.com
 */
class Payone_Core_Model_Observer_TransactionStatus_Failed
    extends Payone_Core_Model_Observer_Abstract
{
    /** @var $order Mage_Sales_Model_Order */
    private $order = null;

    /** @var $transactionStatus Payone_Core_Model_Domain_Protocol_TransactionStatus */
    private $transactionStatus = null;

    /** @var $method Payone_Core_Model_Payment_Method_Abstract */
    private $method = null;

    /**
     * @param Varien_Event_Observer $observer
     */
    public function onFailed(Varien_Event_Observer $observer)
    {
        $this->initData($observer);
        if($this->method instanceof Payone_Core_Model_Payment_Method_AmazonPay) {
            $aParameters = array('store' => $this->order->getStore());
            $this->helperEmail()->send('general', $this->order->getCustomerEmail(), false, 'payone_amazon_hard_decline', $aParameters);
        }
    }

    /**
     * @param Varien_Event_Observer $observer
     */
    protected function initData(Varien_Event_Observer $observer)
    {
        $event = $observer->getEvent();

        /** @var $transactionStatus Payone_Core_Model_Domain_Protocol_TransactionStatus */
        $this->transactionStatus = $event->getTransactionStatus();
        $this->order = $this->getOrderByTransactionStatus($this->transactionStatus);
        $this->method = $this->order->getPayment()->getMethodInstance();
    }

    /**
     * @param Payone_Core_Model_Domain_Protocol_TransactionStatus $transactionStatus
     * @return Mage_Sales_Model_Order
     */
    protected function getOrderByTransactionStatus(Payone_Core_Model_Domain_Protocol_TransactionStatus $transactionStatus)
    {
        $order = $this->getFactory()->getModelSalesOrder();
        $order->load($transactionStatus->getOrderId());
        return $order;
    }
}
