<?php
namespace Jet_Dashboard\Modules\Settings;

use Jet_Dashboard\Base\Page_Module as Page_Module_Base;
use Jet_Dashboard\Dashboard as Dashboard;
use Jet_Dashboard\Utils as Utils;

// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
	die;
}

class Module extends Page_Module_Base {

	/**
	 * [$default_settings_page description]
	 * @var boolean
	 */
	public $default_subpage_module = false;

	/**
	 * Returns module slug
	 *
	 * @return void
	 */
	public function get_page_slug() {
		return 'settings-page';
	}

	/**
	 * [get_subpage_slug description]
	 * @return [type] [description]
	 */
	public function get_parent_slug() {
		return false;
	}

	/**
	 * [get_page_name description]
	 * @return [type] [description]
	 */
	public function get_page_name() {
		return esc_html__( 'Settings', 'jet-dashboard' );
	}

	/**
	 * [get_category description]
	 * @return [type] [description]
	 */
	public function get_category() {
		return false;
	}

	/**
	 * [create description]
	 * @return [type] [description]
	 */
	public function create() {
		add_action( 'admin_menu', array( $this, 'register_page' ), -998 );
	}

	/**
	 * [register_page description]
	 * @return [type] [description]
	 */
	public function register_page() {

		if ( empty( Dashboard::get_instance()->module_manager->get_registered_subpage_modules() ) ) {
			return;
		}

		add_submenu_page(
			Dashboard::get_instance()->dashboard_slug,
			esc_html__( 'JetPlugins Settings', 'jet-dashboard' ),
			esc_html__( 'JetPlugins Settings', 'jet-dashboard' ),
			'manage_options',
			Dashboard::get_instance()->dashboard_slug . '-settings-page',
			function() {
				include Dashboard::get_instance()->get_view( 'common/dashboard' );
			}
		);
	}

	/**
	 * [get_page_link description]
	 * @return [type] [description]
	 */
	public function get_page_link() {
		return Dashboard::get_instance()->get_dashboard_page_url( $this->get_page_slug(), $this->get_parent_slug() );
	}

	public function init() {
		$page_slug = $this->get_page_slug();
		$subpage = Dashboard::get_instance()->get_subpage();

		if ( ! $subpage ) {
			$subpage_module_list = Dashboard::get_instance()->module_manager->get_subpage_module_list( $page_slug );
			$this->default_subpage_module = ! empty( $subpage_module_list ) ? $subpage_module_list[0]['page'] : false;
			Dashboard::get_instance()->module_manager->load_subpage_module( $this->default_subpage_module );
		}
	}

	/**
	 * Enqueue module-specific assets
	 *
	 * @return void
	 */
	public function enqueue_module_assets() {
		wp_enqueue_script(
			'jet-dashboard-settings-page',
			Dashboard::get_instance()->get_dashboard_url() . 'assets/js/settings-page.js',
			array( 'cx-vue-ui' ),
			Dashboard::get_instance()->get_dashboard_version(),
			true
		);
	}

	/**
	 * License page config
	 *
	 * @param  array  $config  [description]
	 * @param  string $subpage [description]
	 * @return [type]          [description]
	 */
	public function page_config( $config = array(), $page = false, $subpage = false ) {

		$config['pageModule']       = $this->get_page_slug();
		$config['subPageModule']    = $this->default_subpage_module;
		$config['subpageList']      = Dashboard::get_instance()->module_manager->get_subpage_module_list( $this->get_page_slug() );
		$config['categoryList']     = Dashboard::get_instance()->module_manager->get_subpage_category_list( $this->get_page_slug() );

		if ( ! Dashboard::get_instance()->get_subpage() ) {
			$config['pageModuleConfig'] = Dashboard::get_instance()->data_manager->get_dashboard_page_config( $this->get_page_slug(), $this->default_subpage_module );
		}

		return $config;
	}

	/**
	 * [page_templates description]
	 * @param  array  $templates [description]
	 * @param  string $subpage   [description]
	 * @return [type]            [description]
	 */
	public function page_templates( $templates = array(), $page = false, $subpage = false ) {

		$templates['settings-page'] = Dashboard::get_instance()->get_view( 'settings/main' );
		$templates['plugin-settings-toggle'] = Dashboard::get_instance()->get_view( 'settings/plugin-settings-toggle' );

		return $templates;
	}
}
