<?php

/**
 * @package     Sven.Bluege
 * @subpackage  com_eventgallery
 *
 * @copyright   Copyright (C) 2005 - 2019 Sven Bluege All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;


jimport('joomla.application.component.view');


class EventgalleryViewCheckout extends EventgalleryLibraryCommonView
{

    /**
     * @var JDocument
     */
    public $document;

    /**
     * @var \Joomla\CMS\Form\Form
     */
    protected $billingform;
    /**
     * @var EventgalleryLibraryCart
     */
    protected $cart;
    /**
     * @var \Joomla\Component\Eventgallery\Site\Library\Configuration\Main
     */
    protected $config;

    /**
     * @var \Joomla\CMS\Form\Form
     */
    protected $shippingform;

    /**
     * @var JForm
     */
    protected $loginform;

    protected $state;

    /**
     * @var JForm
     */
    protected $userdataform;

    /**
     * @var JForm
     */
    protected $userdataformwithname;


    function display($tpl = null)
    {
        /**
         * @var \Joomla\CMS\Application\CMSApplicationInterface $app
         */
        $app = JFactory::getApplication();
        $this->state = $this->get('State');
        $this->config = \Joomla\Component\Eventgallery\Site\Library\Configuration\Main::getInstance($app->getParams());
        /**
         * @var EventgalleryModelCheckout $model
         */
        $model = $this->getModel('checkout');

        /* @var EventgalleryLibraryManagerCart $cartMgr */
        $cartMgr = EventgalleryLibraryManagerCart::getInstance();
        $this->cart = $cartMgr->getCart();

        if ($this->cart->getShippingMethod() != null && !$this->cart->getShippingMethod()->needsAddressData()) {
            $skipAddressForms = true;
        } else {
            $skipAddressForms = false;
        }

        // set the default view
        if ($this->getLayout() == 'default') {
            $this->setLayout('review');
        }

        if ($app->input->getBool('returnfrompayment', false)) {
            $app->enqueueMessage(JText::_('COM_EVENTGALLERY_CART_CHECKOUT_CONFIRM_PAYMENT_RETURN'));
        }

        // if the current layout is not confirm and some details are missing, display the change page.
        // if there are no items in the cart, go the the cart page.
        if ($this->getLayout() != 'confirm') {

            if ($this->cart->getLineItemsCount()==0) {
                $app->redirect(
                    JRoute::_("index.php?option=com_eventgallery&view=cart", false)
                );
            }

            if ($this->cart->getShippingMethodServiceLineItem() == null
                || $this->cart->getPaymentMethodServiceLineItem() == null
                || ($this->cart->getShippingAddress() == null && !$skipAddressForms)
                || ($this->cart->getBillingAddress() == null && !$skipAddressForms)
            ) {

                $this->setLayout('change');

            }

        }

        if ($this->getLayout() == 'change') {

            $this->userdataform = $model->getUserDataForm();

            $this->userdataform->reset();
            $this->userdataform->bind(
                array(
                    'message' => $this->cart->getMessage(),
                    'email' => $this->cart->getEMail(),
                    'phone' => $this->cart->getPhone()
                )
            );
            $this->userdataform->bind($app->input->post->getArray());

            $this->userdataformwithname = $model->getUserDataFormWithoutAddress();
            $this->userdataformwithname->reset();
            $this->userdataformwithname->bind(
                array(
                    'firstname' => $this->cart->getFirstname(),
                    'lastname' => $this->cart->getLastname(),
                    'message' => $this->cart->getMessage(),
                    'email' => $this->cart->getEMail(),
                    'phone' => $this->cart->getPhone()
                )
            );
            $this->userdataformwithname->bind($app->input->post->getArray());

            $this->billingform = $model->getBillingAddressForm();

            $this->billingform->reset();

            if ($this->cart->getBillingAddress() != null) {
                $this->billingform->bind($this->cart->getBillingAddress()->_getData('billing_'));
            }
            $this->billingform->bind($app->input->post->getArray());


            $this->shippingform = $model->getShippingAddressForm();


            if ($this->cart->getShippingAddress() != null) {
                $this->shippingform->bind($this->cart->getShippingAddress()->_getData('shipping_'));
            }
            $this->shippingform->bind($app->input->post->getArray());

            // Get the form.
            // Joomla 4 FIX TODO: Delete if not supporting Joomla 3 any longer
            JForm::addFormPath(JPATH_BASE . '/components/com_users/models/forms');
            JForm::addFieldPath(JPATH_BASE . '/components/com_users/models/fields');

            JForm::addFormPath(JPATH_BASE . '/components/com_users/forms');

            $this->loginform = JForm::getInstance('com_users.login', 'login');

            $script = JUri::root(true) . '/media/com_eventgallery/dist/eventgallery-checkout-change.js?v=' . EVENTGALLERY_VERSION . '&e=' . EVENTGALLERY_EXTENDED;
            $this->document->addScript($script);

        }

        $pathway = $app->getPathWay();
        $pathway->addItem(JText::_('COM_EVENTGALLERY_CART_CHECKOUT_PATH'));

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document
     */
    protected function _prepareDocument()
    {
        $app = JFactory::getApplication();
        $title = null;

        $title = $this->config->getMenuItem()->getPageTitle();

        $title .= " - " . JText::_('COM_EVENTGALLERY_CART_CHECKOUT_PATH');


        // Check for empty title and add site name if param is set
        if (empty($title)) {
            $title = $app->get('sitename');
        } elseif ($app->get('sitename_pagetitles', 0) == 1) {
            $title = JText::sprintf('JPAGETITLE', $app->get('sitename'), $title);
        } elseif ($app->get('sitename_pagetitles', 0) == 2) {
            $title = JText::sprintf('JPAGETITLE', $title, $app->get('sitename'));
        }


        if ($this->document) {

            $this->document->setTitle($title);

        }
    }

}
