<?php

namespace WPDesk\PluginBuilder\Plugin;

/**
 * Base plugin class for WP Desk plugins.
 *
 * *************************************************************
 * * Important! This class should be not modified!             *
 * * This class is loaded at startup from first loaded plugin! *
 * *************************************************************
 *
 * @author Grzegorz, Dyszczo
 *
 */
abstract class AbstractPlugin implements \WPDesk_Translable {

	/** @var \WPDesk_Plugin_Info */
	protected $plugin_info;

	/** @var string */
	protected $plugin_namespace;

	/** @var string */
	protected $plugin_url;

	/** @var string */
	protected $docs_url;

	/** @var string */
	protected $settings_url;

	/**
	 * Support URL.
	 *
	 * @var string
	 */
	protected $support_url;

	/**
	 * AbstractPlugin constructor.
	 *
	 * @param \WPDesk_Plugin_Info $plugin_info
	 */
	public function __construct( $plugin_info ) {
		$this->plugin_info      = $plugin_info;
		$this->plugin_namespace = strtolower( $plugin_info->get_plugin_dir() );
	}

	public function init() {
		$this->init_base_variables();
		$this->hooks();
	}

	public function init_base_variables() {
		$this->plugin_url = plugin_dir_url( $this->plugin_info->get_plugin_dir() );
	}

	/**
	 * @return void
	 */
	protected function hooks() {
		add_action( 'admin_enqueue_scripts', [ $this, 'admin_enqueue_scripts' ] );

		add_action( 'wp_enqueue_scripts', [ $this, 'wp_enqueue_scripts' ] );

		add_action( 'plugins_loaded', [ $this, 'load_plugin_text_domain' ] );
		add_filter( 'plugin_action_links_' . plugin_basename( $this->get_plugin_file_path() ), [
			$this,
			'links_filter'
		] );

	}

	/**
	 * @return string
	 */
	public function get_plugin_file_path() {
		return $this->plugin_info->get_plugin_file_name();
	}

	/**
	 * @return $this
	 */
	public function get_plugin() {
		return $this;
	}

	/**
	 * @return void
	 */
	public function load_plugin_text_domain() {
		load_plugin_textdomain( $this->get_text_domain(), false, $this->get_namespace() . '/lang/' );
	}

	/**
	 * @return string
	 */
	public function get_text_domain() {
		return $this->plugin_info->get_text_domain();
	}

	/**
	 * @return string
	 */
	public function get_namespace() {
		return $this->plugin_namespace;
	}

	public function get_plugin_assets_url() {
		return esc_url( trailingslashit( $this->get_plugin_url() . 'assets' ) );
	}

	/**
	 *
	 * @return string
	 */
	public function get_plugin_url() {
		return esc_url( trailingslashit( $this->plugin_url ) );
	}

	public function admin_enqueue_scripts() {
	}

	public function wp_enqueue_scripts() {
	}

	/**
	 * action_links function.
	 *
	 * @access public
	 *
	 * @param mixed $links
	 *
	 * @return array
	 */
	public function links_filter( $links ) {
		$support_link = get_locale() === 'pl_PL' ? 'https://www.wpdesk.pl/support/' : 'https://www.wpdesk.net/support';

		if( $this->support_url ) {
			$support_link = $this->support_url;
		}

		$plugin_links = [
			'<a href="' . $support_link . '">' . __( 'Support', $this->get_text_domain() ) . '</a>',
		];
		$links        = array_merge( $plugin_links, $links );

		if ( $this->docs_url ) {
			$plugin_links = [
				'<a href="' . $this->docs_url . '">' . __( 'Docs', $this->get_text_domain() ) . '</a>',
			];
			$links        = array_merge( $plugin_links, $links );
		}

		if ( $this->settings_url ) {
			$plugin_links = [
				'<a href="' . $this->settings_url . '">' . __( 'Settings', $this->get_text_domain() ) . '</a>',
			];
			$links        = array_merge( $plugin_links, $links );
		}

		return $links;
	}

}