<?php

namespace Nextend\SmartSlider3\Platform\WordPress;

use Nextend\Framework\Asset\Predefined;
use Nextend\Framework\Sanitize;
use Nextend\Framework\WordPress\AssetInjector;
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
use Nextend\SmartSlider3\Platform\AbstractSmartSlider3Platform;
use Nextend\SmartSlider3\Platform\WordPress\Admin\AdminHelper;
use Nextend\SmartSlider3\Platform\WordPress\Admin\Pro\WordPressUpdate;
use Nextend\SmartSlider3\Platform\WordPress\Integration\ACF\ACF;
use Nextend\SmartSlider3\Platform\WordPress\Integration\BeaverBuilder\BeaverBuilder;
use Nextend\SmartSlider3\Platform\WordPress\Integration\BoldGrid\BoldGrid;
use Nextend\SmartSlider3\Platform\WordPress\Integration\Brizy\Brizy;
use Nextend\SmartSlider3\Platform\WordPress\Integration\Divi\Divi;
use Nextend\SmartSlider3\Platform\WordPress\Integration\Elementor\Elementor;
use Nextend\SmartSlider3\Platform\WordPress\Integration\Fusion\Fusion;
use Nextend\SmartSlider3\Platform\WordPress\Integration\Gutenberg\Gutenberg;
use Nextend\SmartSlider3\Platform\WordPress\Integration\Jetpack\Jetpack;
use Nextend\SmartSlider3\Platform\WordPress\Integration\MotoPressCE\MotoPressCE;
use Nextend\SmartSlider3\Platform\WordPress\Integration\NimbleBuilder\NimbleBuilder;
use Nextend\SmartSlider3\Platform\WordPress\Integration\OxygenBuilder\OxygenBuilder;
use Nextend\SmartSlider3\Platform\WordPress\Integration\RankMath\RankMath;
use Nextend\SmartSlider3\Platform\WordPress\Integration\TablePress\TablePress;
use Nextend\SmartSlider3\Platform\WordPress\Integration\TatsuBuilder\TatsuBuilder;
use Nextend\SmartSlider3\Platform\WordPress\Integration\ThemifyBuilder\ThemifyBuilder;
use Nextend\SmartSlider3\Platform\WordPress\Integration\Unyson\Unyson;
use Nextend\SmartSlider3\Platform\WordPress\Integration\VisualComposer1\VisualComposer1;
use Nextend\SmartSlider3\Platform\WordPress\Integration\VisualComposer2\VisualComposer2;
use Nextend\SmartSlider3\Platform\WordPress\Integration\WPRocket\WPRocket;
use Nextend\SmartSlider3\Platform\WordPress\Shortcode\Shortcode;
use Nextend\SmartSlider3\Platform\WordPress\Widget\WidgetHelper;
use Nextend\SmartSlider3\PublicApi\Project;

class SmartSlider3PlatformWordPress extends AbstractSmartSlider3Platform {

    public function start() {

        require_once dirname(__FILE__) . '/compat.php';

        $helperInstall = new HelperInstall();
        $helperInstall->installOrUpgrade();

        new WidgetHelper();
        new Shortcode();

        if (is_admin()) {
            new AdminHelper();
        }

        add_action('admin_head', function () {

            if (wp_script_is('gutenberg-smartslider3')) {

                Predefined::frontend();
                Predefined::backend();
                ApplicationSmartSlider3::getInstance()
                                       ->getApplicationTypeAdmin()
                                       ->enqueueAssets();
            }
        });

        new WordPressFrontend();

        AssetInjector::getInstance();

        $this->integrate();

        $this->initSanitize();
    }

    public function getAdminUrl() {

        return admin_url("admin.php?page=" . NEXTEND_SMARTSLIDER_3_URL_PATH);
    }

    public function getAdminAjaxUrl() {

        return add_query_arg(array('action' => NEXTEND_SMARTSLIDER_3_URL_PATH), admin_url('admin-ajax.php'));
    }

    public function getNetworkAdminUrl() {

        return network_admin_url("admin.php?page=" . NEXTEND_SMARTSLIDER_3_URL_PATH);
    }

    private function integrate() {

        new Compatibility();

        new TablePress();

        new Gutenberg();

        HelperTinyMCE::getInstance();

        /**
         * Advanced Custom Fields
         */
        new ACF();

        new Divi();

        new VisualComposer1();

        new VisualComposer2();

        new Elementor();

        new MotoPressCE();

        new BeaverBuilder();

        new Jetpack();

        new Fusion();

        new WPRocket();

        new Unyson();

        new OxygenBuilder();

        new NimbleBuilder();

        new Brizy();

        new BoldGrid();

        new RankMath();

        new ThemifyBuilder();

        new TatsuBuilder();
    }

    private function initSanitize() {
        Sanitize::set_allowed_tags();
    }

    /**
     * @param $file
     *
     * @return bool|int
     *
     * @deprecated
     */
    public static function importSlider($file) {

        return Project::import($file);
    }
}