<?php
/**

 * @package DJ-MegaMenu
 * @copyright Copyright (C) 2022 DJ-Extensions.com, All rights reserved.
 * @license http://www.gnu.org/licenses GNU/GPL
 * @author url: https://dj-extensions.com
 * @author email contact@dj-extensions.com
 * @developer Szymon Woronowski, Artur Kaczmarek
 *
 * DJ-MegaMenu is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * DJ-MegaMenu is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with DJ-MegaMenu. If not, see <http://www.gnu.org/licenses/>.
 *
 */

// no direct access
defined('_JEXEC') or die;

require_once(dirname(__FILE__) .'/helpers/legacy.php');

class plgSystemDJMegaMenu extends JPlugin
{
    function onContentPrepareForm($form, $data)
    {
        $isJoomla4 = version_compare(DJLegacyHelper::getJoomlaVersion(), '4', '>=');

        // extra option for menu item
        if ($form->getName() == 'com_menus.item') {
            $this->loadLanguage();
            JForm::addFormPath(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'params');
            $form->loadFile('djmmitem', true);
        }

        if($form->getName() == 'com_modules.module' || $form->getName() == 'com_advancedmodules.module') {
            // delete old custom themes
            if(isset($data->module) && $data->module == 'mod_djmegamenu') {
                $path = JPATH_ROOT . '/media/djmegamenu/themes/custom'.$data->id.'.css';
                JFile::delete($path);
                $path = JPATH_ROOT . '/media/djmegamenu/themes/custom'.$data->id.'_rtl.css';
                JFile::delete($path);
                $path = JPATH_ROOT . '/media/djmegamenu/mobilethemes/custom'.$data->id.'.css';
                JFile::delete($path);
                $path = JPATH_ROOT . '/media/djmegamenu/mobilethemes/custom'.$data->id.'_rtl.css';
                JFile::delete($path);
            }
        }

    }

    function onBeforeRender() {

        $app = JFactory::getApplication();
        $doc = JFactory::getDocument();


        if(DJLegacyHelper::isAdmin()) {
            return;
        }

        $items = $app->getMenu()->getItems(array(), array());
        $css = '.dj-hideitem'; // hide menu items before they are removed from DOM

        foreach($items as $item) {

			$item_params = $item->getParams();

            $modules = ($item_params->get('djmegamenu-module_pos') || $item_params->get('djmobilemenu-module_pos')) ? true : false;
            $show_link = ($item_params->get('djmegamenu-module_show_link') || $item_params->get('djmobilemenu-module_show_link')) ? true : false;
            if(($modules && !$show_link) || $item_params->get('djmegamenu-show')) {
                $css .= ", li.item-$item->id";
            }
        }

        $css .= " { display: none !important; }\n";
        $doc->addStyleDeclaration($css);
    }

    function onAfterRender() {

        $app = JFactory::getApplication();

        if(DJLegacyHelper::isAdmin()) {
            return;
        }

        $version = new JVersion;
        $isJoomla4 = version_compare($version->getShortVersion(), '4', '>=');
		$template = $app->getTemplate();

		$FXnotSupported = ( 'cassiopeia' == $template ) ? true : false;

        $addWrappers = $this->params->get('wrappers', 1);

        $documentFormat = $app->input->getCmd('format', 'html');

        if (!$FXnotSupported && $addWrappers && ($documentFormat == 'html' || is_null($documentFormat))) {

            if (version_compare(JVERSION, '3.2.3', '>=')) {
                $html = $app->getBody();
            } else {
                $html = JResponse::getBody();
            }

            if( preg_match("/<body[^>]*>(.*?)<\/body>/is", $html, $matches)) {

                $body = '<div class="dj-offcanvas-wrapper"><div class="dj-offcanvas-pusher"><div class="dj-offcanvas-pusher-in">'.$matches[1].'</div></div></div>';

				//check if offcanvas effect 1 'slide in on top'
				$simple_FX = preg_match('/aside(.*)dj-offcanvas(.*)data-effect="1"/is', $html);
                if( !$simple_FX ) $html = str_replace($matches[1], $body, $html);
            }

            if (version_compare(JVERSION, '3.2.3', '>=')) {
                $app->setBody($html);
            } else {
                JResponse::setBody($html);
            }
        }
    }

    function debug($msg){
        $app = JFactory::getApplication();
        $app->enqueueMessage("<pre>".print_r($msg, true)."</pre>");
    }

}
