<?php

namespace WPForms\Admin\Tools\Views;

use WPForms\Admin\Tools\Tools;

/**
 * Single View class.
 *
 * @since 1.6.6
 */
abstract class View {

	/**
	 * View slug.
	 *
	 * @since 1.6.6
	 *
	 * @var string
	 */
	protected $slug;

	/**
	 * Init.
	 *
	 * @since 1.6.6
	 */
	abstract public function init();

	/**
	 * Get link to the view page.
	 *
	 * @since 1.6.6
	 *
	 * @return string
	 */
	public function get_link() {

		return add_query_arg(
			[
				'page' => Tools::SLUG,
				'view' => $this->slug,
			],
			admin_url( 'admin.php' )
		);
	}

	/**
	 * Get view label.
	 *
	 * @since 1.6.6
	 *
	 * @return string
	 */
	abstract public function get_label();

	/**
	 * Checking user capability to view.
	 *
	 * @since 1.6.6
	 *
	 * @return bool
	 */
	abstract public function check_capability();

	/**
	 * Checking if needs display in navigation.
	 *
	 * @since 1.6.6
	 *
	 * @return bool
	 */
	public function hide_from_nav() {

		return false;
	}

	/**
	 * Checking if navigation needs display.
	 *
	 * @since 1.6.6
	 *
	 * @return bool
	 */
	public function show_nav() {

		return true;
	}

	/**
	 * Display nonce field.
	 *
	 * @since 1.6.6
	 */
	public function nonce_field() {

		wp_nonce_field( 'wpforms_' . $this->slug . '_nonce', 'wpforms-tools-' . $this->slug . '-nonce' );
	}

	/**
	 * Verify nonce field.
	 *
	 * @since 1.6.6
	 */
	public function verify_nonce(): bool {

		$nonce_name = 'wpforms-tools-' . $this->slug . '-nonce';
		$nonce      = isset( $_POST[ $nonce_name ] ) ? sanitize_text_field( wp_unslash( $_POST[ $nonce_name ] ) ) : '';

		return (bool) wp_verify_nonce( $nonce, 'wpforms_' . $this->slug . '_nonce' );
	}

	/**
	 * Display view content.
	 *
	 * @since 1.6.6
	 */
	abstract public function display();
}
