<?php
namespace DeployerForGit\Subpages\MiscellaneousPage;

use DeployerForGit\DataManager;
use DeployerForGit\Helper;

/**
 * Miscellaneous page
 */
class Miscellaneous {

	/**
	 * Constructor
	 */
	public function __construct() {
		add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', array( $this, 'init_menu' ) );
	}

	/**
	 * Initialize menu
	 *
	 * @return void
	 */
	public function init_menu() {
		$menu_slug  = Helper::menu_slug();
		$capability = is_multisite() ? 'manage_network_options' : 'manage_options';

		add_submenu_page(
			$menu_slug,
			esc_attr__( 'Miscellaneous', 'deployer-for-git' ),
			esc_attr__( 'Miscellaneous', 'deployer-for-git' ),
			$capability,
			"{$menu_slug}-miscellaneous",
			array( $this, 'init_page' )
		);
	}

	/**
	 * Initialize page
	 *
	 * @return void
	 */
	public function init_page() {
		$regenerate_secret_key_result = $this->handle_regenerate_secret_key_form();
		$flush_cache_result           = $this->handle_flush_cache_form();
		$alert_notification_result    = $this->handle_alert_notification_form();
		$data_manager                 = new DataManager();

		include_once __DIR__ . '/template.php';
	}

	/**
	 * Handle regenerate secret key form
	 *
	 * @return boolean|null
	 */
	public function handle_regenerate_secret_key_form() {
		$result = null;

		if ( isset( $_POST['action'] ) && $_POST['action'] === 'regenerate_secret_key' ) {
			$result = false;

			if ( isset( $_POST[ DFG_SLUG . '_nonce' ] ) || wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST[ DFG_SLUG . '_nonce' ] ) ), DFG_SLUG . '_regenerate_secret_key' ) ) {
				$result = true;
				Helper::generate_api_secret();

				do_action( 'dfg_after_secret_key_regenerate' );
			}
		}

		return $result;
	}

	/**
	 * Handle flush cache form
	 *
	 * @return boolean|null
	 */
	public function handle_flush_cache_form() {
		$result = null;

		if ( isset( $_POST['action'] ) && $_POST['action'] === 'flush_cache' ) {
			$result = false;

			if ( isset( $_POST[ DFG_SLUG . '_nonce' ] ) || wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST[ DFG_SLUG . '_nonce' ] ) ), DFG_SLUG . '_flush_cache' ) ) {
				$data_manager = new DataManager();

				$result = $data_manager->update_flush_cache_setting( isset( $_POST['flush_cache_setting'] ) );

				do_action( 'dfg_after_flush_cache_setting_update' );
			}
		}

		return $result;
	}

	/**
	 * Handle alert notification form
	 *
	 * @return boolean|null
	 */
	public function handle_alert_notification_form() {
		$result = null;

		if ( isset( $_POST['action'] ) && $_POST['action'] === 'alert_notification' ) {
			$result = false;

			if ( isset( $_POST[ DFG_SLUG . '_nonce' ] ) || wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST[ DFG_SLUG . '_nonce' ] ) ), DFG_SLUG . '_alert_notification' ) ) {
				$data_manager = new DataManager();

				$result = $data_manager->update_alert_notification_setting( isset( $_POST['alert_notification_setting'] ) );

				do_action( 'dfg_after_alert_notification_setting_update' );
			}
		}

		return $result;
	}
}