<?php

/**
* The file that defines the core plugin class
*
* A class definition that includes attributes and functions used across both the
* public-facing side of the site and the admin area.
*
* @link       http://www.exapartners.com/
* @since      1.0.0
*
* @package    Esi_Management
* @subpackage Esi_Management/includes
*/

/**
* The core plugin class.
*
* This is used to define internationalization, admin-specific hooks, and
* public-facing site hooks.
*
* Also maintains the unique identifier of this plugin as well as the current
* version of the plugin.
*
* @since      1.0.0
* @package    Esi_Management
* @subpackage Esi_Management/includes
* @author     Kremer Nicolas <nicolas.kremer@exapartners.com>
*/
class Esi_Management {

	/**
	* The loader that's responsible for maintaining and registering all hooks that power
	* the plugin.
	*
	* @since    1.0.0
	* @access   protected
	* @var      Esi_Management_Loader    $loader    Maintains and registers all hooks for the plugin.
	*/
	protected $loader;

	/**
	* The unique identifier of this plugin.
	*
	* @since    1.0.0
	* @access   protected
	* @var      string    $plugin_name    The string used to uniquely identify this plugin.
	*/
	protected $plugin_name;

	/**
	* The current version of the plugin.
	*
	* @since    1.0.0
	* @access   protected
	* @var      string    $version    The current version of the plugin.
	*/
	protected $version;

	/**
	* Define the core functionality of the plugin.
	*
	* Set the plugin name and the plugin version that can be used throughout the plugin.
	* Load the dependencies, define the locale, and set the hooks for the admin area and
	* the public-facing side of the site.
	*
	* @since    1.0.0
	*/
	public function __construct() {

		$this->plugin_name = 'esi-management';
		$this->version = '1.0.0';

		$this->load_dependencies();
		$this->set_locale();
		$this->define_admin_hooks();
		$this->define_public_hooks();

	}

	/**
	* Load the required dependencies for this plugin.
	*
	* Include the following files that make up the plugin:
	*
	* - Esi_Management_Loader. Orchestrates the hooks of the plugin.
	* - Esi_Management_i18n. Defines internationalization functionality.
	* - Esi_Management_Admin. Defines all hooks for the admin area.
	* - Esi_Management_Public. Defines all hooks for the public side of the site.
	*
	* Create an instance of the loader which will be used to register the hooks
	* with WordPress.
	*
	* @since    1.0.0
	* @access   private
	*/
	private function load_dependencies() {

		/**
		* The class responsible for orchestrating the actions and filters of the
		* core plugin.
		*/
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-esi-management-loader.php';

		/**
		* The class responsible for defining internationalization functionality
		* of the plugin.
		*/
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-esi-management-i18n.php';

		/**
		* The class responsible for defining all actions that occur in the admin area.
		*/
		// Functions
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/radar/functions-radar.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/news/functions-news.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/media/functions-media.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/entity/functions-entity.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/type/functions-type.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/investment/functions-investment.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/investment-type/functions-investment-type.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/region/functions-region.php';

		// Default
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-esi-management-admin.php';

		// Radar
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/radar/class-esi-management-radar.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/radar/class-esi-management-radar-list.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/radar/class-esi-management-radar-form.php';

		// News
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/news/class-esi-management-news.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/news/class-esi-management-news-list.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/news/class-esi-management-news-form.php';

		// Media
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/media/class-esi-management-media.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/media/class-esi-management-media-list.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/media/class-esi-management-media-form.php';

		// entity
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/entity/class-esi-management-entity.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/entity/class-esi-management-entity-list.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/entity/class-esi-management-entity-form.php';

		// Type
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/type/class-esi-management-type.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/type/class-esi-management-type-list.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/type/class-esi-management-type-form.php';

		// Investment
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/investment/class-esi-management-investment.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/investment/class-esi-management-investment-list.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/investment/class-esi-management-investment-form.php';

		// Investment type
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/investment-type/class-esi-management-investment-type.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/investment-type/class-esi-management-investment-type-list.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/investment-type/class-esi-management-investment-type-form.php';

		// Region
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/region/class-esi-management-region.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/region/class-esi-management-region-list.php';
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/modules/region/class-esi-management-region-form.php';

		/**
		* The class responsible for defining all actions that occur in the public-facing
		* side of the site.
		*/
		require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/class-esi-management-public.php';

		$this->loader = new Esi_Management_Loader();

	}

	/**
	* Define the locale for this plugin for internationalization.
	*
	* Uses the Esi_Management_i18n class in order to set the domain and to register the hook
	* with WordPress.
	*
	* @since    1.0.0
	* @access   private
	*/
	private function set_locale() {

		$plugin_i18n = new Esi_Management_i18n();

		$this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' );

	}

	/**
	* Register all of the hooks related to the admin area functionality
	* of the plugin.
	*
	* @since    1.0.0
	* @access   private
	*/
	private function define_admin_hooks() {

		$plugin_admin = new Esi_Management_Admin( $this->get_plugin_name(), $this->get_version() );

		$this->loader->add_action( 'init', $plugin_admin, 'create_news_type' );

		$this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' );
		$this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts' );

		// Add menu item
		$this->loader->add_action( 'admin_menu', $plugin_admin, 'add_plugin_admin_menu' );

		// Add Ajax
		$this->loader->add_action( 'wp_ajax_esi_ajax_action', $plugin_admin, 'esi_ajax_callback' );
		$this->loader->add_action( 'wp_ajax_esi_company_ajax_action', $plugin_admin, 'esi_company_ajax_callback' );
		$this->loader->add_action( 'wp_ajax_esi_media_ajax_action', $plugin_admin, 'esi_media_ajax_callback' );
		$this->loader->add_action( 'wp_ajax_esi_investment_ajax_action', $plugin_admin, 'esi_investment_ajax_callback' );
		$this->loader->add_action( 'wp_ajax_esi_radar_ajax_action', $plugin_admin, 'esi_radar_ajax_callback' );
		$this->loader->add_action( 'wp_ajax_esi_industries_ajax_action', $plugin_admin, 'esi_industries_ajax_callback' );
		$this->loader->add_action( 'wp_ajax_esi_technologies_ajax_action', $plugin_admin, 'esi_technologies_ajax_callback' );
		$this->loader->add_action( 'wp_ajax_esi_technologies_ajax_action', $plugin_admin, 'esi_technologies_ajax_callback' );

		// Add radars field to user form
		// $this->loader->add_action('show_user_profile', $plugin_admin, 'esi_custom_user_profile_fields');
		$this->loader->add_action('edit_user_profile', $plugin_admin, 'esi_custom_user_profile_fields');

		// Add radar action
		// $plugin_admin_radar = new Esi_Management_News( $this->get_plugin_name(), $this->get_version() );

	}

	/**
	* Register all of the hooks related to the public-facing functionality
	* of the plugin.
	*
	* @since    1.0.0
	* @access   private
	*/
	private function define_public_hooks() {

		$plugin_public = new Esi_Management_Public( $this->get_plugin_name(), $this->get_version() );

		$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' );
		$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' );

	}

	/**
	* Run the loader to execute all of the hooks with WordPress.
	*
	* @since    1.0.0
	*/
	public function run() {
		$this->loader->run();
	}

	/**
	* The name of the plugin used to uniquely identify it within the context of
	* WordPress and to define internationalization functionality.
	*
	* @since     1.0.0
	* @return    string    The name of the plugin.
	*/
	public function get_plugin_name() {
		return $this->plugin_name;
	}

	/**
	* The reference to the class that orchestrates the hooks with the plugin.
	*
	* @since     1.0.0
	* @return    Esi_Management_Loader    Orchestrates the hooks of the plugin.
	*/
	public function get_loader() {
		return $this->loader;
	}

	/**
	* Retrieve the version number of the plugin.
	*
	* @since     1.0.0
	* @return    string    The version number of the plugin.
	*/
	public function get_version() {
		return $this->version;
	}

}
