<?php

/**
 * Class Thim_Core_Admin.
 *
 * @package   Thim_Core
 * @since     0.1.0
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

if ( ! class_exists( 'Thim_Core_Admin' ) ) {
    class Thim_Core_Admin extends Thim_Singleton {
        /**
         * Go to theme dashboard.
         *
         * @since 0.8.1
         */
        public static function go_to_theme_dashboard() {
            $link_page = admin_url( '?thim-core-redirect-to-dashboard' );

            thim_core_redirect( $link_page );
        }

        /**
         * Detect my theme.
         *
         * @since 0.8.0
         *
         * @return bool
         */
        public static function is_my_theme() {
            return (bool) get_theme_support( 'thim-core' );
        }

        /**
         * Thim_Core_Admin constructor.
         *
         * @since 0.1.0
         */
        protected function __construct() {
            spl_autoload_register( array( $this, 'autoload' ) );

            if ( ! self::is_my_theme() ) {
                return;
            }

            $this->init();
            $this->init_hooks();
        }

        /**
         * Fake page to redirect to dashboard.
         *
         * @since 0.8.1
         */
        public function redirect_to_dashboard() {
            $request = isset( $_REQUEST['thim-core-redirect-to-dashboard'] );

            if ( ! $request ) {
                return;
            }

            $this->redirect_user();
        }

        /**
         * Handle redirect the user.
         *
         * @since 0.8.5
         */
        private function redirect_user() {
            $url = Thim_Dashboard::get_link_main_dashboard();

            if ( Thim_Dashboard::check_first_install() ) {
                Thim_Admin_Settings::set( 'first_install', false );

                $url = Thim_Dashboard::get_link_page_by_slug( 'getting-started' );
            }

            thim_core_redirect( $url );
        }

        /**
         * Init.
         *
         * @since 0.1.0
         */
        private function init() {
            $this->run();
        }

        /**
         * Autoload classes.
         *
         * @since 0.3.0
         *
         * @param $class
         */
        public function autoload( $class ) {
            $class = strtolower( $class );

            $file_name = 'class-' . str_replace( '_', '-', $class ) . '.php';

            if ( strpos( $class, 'service' ) !== false ) {
                $file_name = 'services/' . $file_name;
            }

            $file = THIM_CORE_ADMIN_PATH . DIRECTORY_SEPARATOR . $file_name;
            if ( is_readable( $file ) ) {
                require_once $file;
            }
        }

        /**
         * Notice permission uploads.
         *
         * @since 0.8.9
         */
        public function notice_permission_uploads() {
            $dir = WP_CONTENT_DIR;

            $writable = wp_is_writable( $dir );
            if ( $writable ) {
                return;
            }

            Thim_Notification::add_notification(
                array(
                    'id'          => 'permission_uploads',
                    'type'        => 'error',
                    'content'     => __( "<h3>Important!</h3>Your server doesn't not have a permission to write in <strong>WP Uploads</strong> folder ($dir).
									The theme may not work properly with the issue. Please check this <a href='https://goo.gl/guirO5' target='_blank'>guide</a> to fix it.", 'thim-core' ),
                    'dismissible' => false,
                    'global'      => true,
                )
            );
        }

        /**
         * Run admin core.
         *
         * @since 0.3.0
         */
        private function run() {
            Thim_Admin_Config::instance();
            Thim_Subscribe::instance();
            Thim_Modal::instance();
            Thim_Metabox::instance();
            Thim_Post_Formats::instance();
            Thim_Singular_Settings::instance();
            Thim_Sidebar_Manager::instance();
            Thim_Dashboard::instance();
            Thim_Layout_Builder::instance();
            Thim_Menu_Manager::instance();
            Thim_Importer_Mapping::instance();
            Thim_Self_Update::instance();
            Thim_Welcome_Panel::instance();
            Thim_Exporter::instance();
            Thim_Developer_Access::instance();
            Thim_Feedback::instance();
            Thim_Pointers::instance();
            Thim_Free_Theme::instance();
            Thim_Core_Schedule::instance();
            Thim_Envato_Hosted::instance();
        }

        /**
         * Init hooks.
         *
         * @since 0.1.0
         */
        private function init_hooks() {
            add_action( 'admin_init', array( $this, 'redirect_to_dashboard' ) );
            add_action( 'admin_menu', array( $this, 'remove_unnecessary_menus' ), 999 );
            add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 5 );
            add_filter( 'plugin_action_links_thim-core/thim-core.php', array( $this, 'add_action_links' ) );
            add_action( 'admin_head', array( $this, 'admin_styles' ) );
            add_filter( 'thim_core_installer_hidden_menu', array( $this, 'hidden_menu_installer' ) );
            add_action( 'thim_core_dashboard_init', array( $this, 'notice_permission_uploads' ) );
            add_filter( 'thim_core_admin_memory_limit', array( $this, 'memory_limit' ) );

            add_action( 'thim_core_installer_complete', array( 'Thim_Core_Admin', 'go_to_theme_dashboard' ) );
        }

        /**
         * Raise memory limit.
         *
         * @since 1.4.8.1
         *
         * @param $current
         *
         * @return string
         */
        public function memory_limit( $current ) {
            $current_limit_int = wp_convert_hr_to_bytes( $current );

            if ( $current_limit_int > 268435456 ) {
                return $current;
            }

            return '256M';
        }


        /**
         * Hidden menu installer.
         *
         * @since 1.0.0
         *
         * @return bool
         */
        public function hidden_menu_installer() {
            return true;
        }

        /**
         * Add custom style inline in admin.
         *
         * @since 0.9.1
         */
        public function admin_styles() {
            global $_wp_admin_css_colors;

            $colors = array(
                '#222',
                '#333',
                '#0073aa',
                '#00a0d2',
            );

            $pack = get_user_meta( get_current_user_id(), 'admin_color', true );
            if ( is_array( $_wp_admin_css_colors ) ) {
                foreach ( $_wp_admin_css_colors as $key => $package ) {
                    if ( $pack == $key ) {
                        $package = (array) $package;
                        $colors  = $package['colors'];
                    }
                }

            }

            Thim_Template_Helper::template( 'admin-styles.php', array( 'colors' => $colors, 'key' => $pack ), true );
        }

        /**
         * Remove unnecessary menus.
         *
         * @since 0.8.8
         */
        public function remove_unnecessary_menus() {
            global $submenu;
            unset( $submenu['themes.php'][15] );
            unset( $submenu['themes.php'][20] );
        }

        /**
         * Add action links.
         *
         * @since 0.8.0
         *
         * @param $links
         *
         * @return string[]
         */
        public function add_action_links( $links ) {
            $links[] = '<a href="https://thimpress.com/forums/" target="_blank">' . __( 'Support', 'thim-core' ) . '</a>';

            return $links;
        }

        /**
         * Enqueue scripts.
         *
         * @since 0.2.1
         */
        public function enqueue_scripts() {
            wp_register_script( 'thim-core-admin', THIM_CORE_ADMIN_URI . '/assets/js/core.js', array( 'jquery' ), THIM_CORE_VERSION );

            wp_register_script( 'thim-core-clipboard', THIM_CORE_ADMIN_URI . '/assets/js/clipboard.min.js', array(), '1.6.0' );

            wp_register_style( 'thim-font-awesome', 'https://use.fontawesome.com/e8cbfd9eca.css', array(), '4.7.0' );

            wp_register_script( 'youtube-api', 'https://www.youtube.com/iframe_api', array() );
            wp_register_script( 'thim-video-youtube', THIM_CORE_ADMIN_URI . '/assets/js/youtube.js', array(
                'jquery',
                'youtube-api'
            ), THIM_CORE_VERSION );

            wp_enqueue_style( 'thim-admin', THIM_CORE_ADMIN_URI . '/assets/css/admin.css', array(), THIM_CORE_VERSION );

            if ( is_rtl() ) {
                wp_enqueue_style( 'thim-rtl-admin', THIM_CORE_ADMIN_URI . '/assets/css/rtl.css', array(), THIM_CORE_VERSION );
            }

            $this->localize_script();
        }

        /**
         * Localize script.
         *
         * @since 1.3.4
         */
        private function localize_script() {
            $theme_metadata = Thim_Theme_Manager::get_metadata();

            wp_localize_script( 'thim-core-admin', 'thim_core_settings', array(
                'active'  => Thim_Product_Registration::is_active() ? 'yes' : 'no',
                'is_free' => Thim_Free_Theme::is_free() ? 'yes' : 'no',
                'theme'   => $theme_metadata
            ) );
        }
    }

    /**
     * Thim Core Admin init.
     *
     * @since 0.8.1
     */
    function thim_core_admin_init() {
        Thim_Core_Admin::instance();
    }

    add_action( 'after_setup_theme', 'thim_core_admin_init', 99999 );
}

/**
 * Include functions.
 *
 * @since 0.1.0
 */
include_once THIM_CORE_ADMIN_PATH . '/functions.php';