<?php

namespace WPForms\Admin\Tools\Views;

use WPForms\Admin\Tools\Importers;

/**
 * Class Importer.
 *
 * @since 1.6.6
 */
class Importer extends View {

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

	/**
	 * Registered importers.
	 *
	 * @since 1.6.6
	 *
	 * @var array
	 */
	public $importers = [];

	/**
	 * Available forms for a specific importer.
	 *
	 * @since 1.6.6
	 *
	 * @var array
	 */
	public $importer_forms = [];

	/**
	 * Init view.
	 *
	 * @since 1.6.6
	 */
	public function init() {

		$importers = new Importers();

		$this->importers = $importers->get_importers();

		if ( ! empty( $_GET['provider'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$this->importer_forms = $importers->get_importer_forms( sanitize_key( $_GET['provider'] ) );//phpcs:ignore WordPress.Security.NonceVerification.Recommended
		}

		// Load the Underscores templates for importers.
		add_action( 'admin_print_scripts', [ $this, 'importer_templates' ] );
	}

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

		return '';
	}

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

		return wpforms_current_user_can( 'create_forms' );
	}

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

		return true;
	}

	/**
	 * Importer view content.
	 *
	 * @since 1.6.6
	 */
	public function display() {

		if ( ! current_user_can( 'unfiltered_html' ) ) {
			$this->error_unfiltered_html_import_message();

			return;
		}

		$this->heading_block();

		$this->forms_block();

		$this->analyze_block();

		$this->process_block();
	}

	/**
	 * Error message for users with no `unfiltered_html` permission.
	 *
	 * @since 1.10.1
	 */
	private function error_unfiltered_html_import_message(): void {

		printf(
			'<div class="notice notice-error"><p>%s</p></div>',
			sprintf(
				wp_kses( /* translators: %s - WPForms contact page URL. */
					__( 'You can\'t import forms because you don\'t have unfiltered HTML permissions. Please contact your site administrator or <a href="%s" target="_blank" rel="noopener noreferrer">reach out to our support team</a>.', 'wpforms-lite' ),
					[
						'a' => [
							'href'   => [],
							'target' => [],
							'rel'    => [],
						],
					]
				),
				esc_url( wpforms_utm_link( 'https://wpforms.com/contact/', 'Tools - Import', 'Support Link - Form Importer No Permissions' ) )
			)
		);
	}

	/**
	 * Get provider.
	 *
	 * @since 1.6.6
	 *
	 * @return string
	 */
	private function get_provider_name() {

		//phpcs:ignore WordPress.Security.NonceVerification.Recommended
		$slug = ! empty( $_GET['provider'] ) ? sanitize_key( $_GET['provider'] ) : '';

		return isset( $this->importers[ $slug ] ) ? $this->importers[ $slug ]['name'] : '';
	}

	/**
	 * Heading block.
	 *
	 * @since 1.6.6
	 */
	private function heading_block() {
		?>

		<div class="wpforms-setting-row tools wpforms-clear section-heading no-desc">
			<div class="wpforms-setting-field">
				<h4><?php esc_html_e( 'Form Import', 'wpforms-lite' ); ?></h4>
			</div>
		</div>
		<?php
	}

	/**
	 * Forms block.
	 *
	 * @since 1.6.6
	 */
	private function forms_block() {
		?>

		<div id="wpforms-importer-forms">
			<div class="wpforms-setting-row tools">
				<p><?php esc_html_e( 'Select the forms you would like to import.', 'wpforms-lite' ); ?></p>

				<div class="checkbox-multiselect-columns">
					<div class="first-column">
						<h5 class="header"><?php esc_html_e( 'Available Forms', 'wpforms-lite' ); ?></h5>

						<ul>
							<?php
							if ( empty( $this->importer_forms ) ) {
								echo '<li>' . esc_html__( 'No forms found.', 'wpforms-lite' ) . '</li>';
							} else {
								foreach ( $this->importer_forms as $id => $form ) {
									printf(
										'<li><label><input type="checkbox" name="forms[]" value="%s">%s</label></li>',
										esc_attr( $id ),
										esc_attr( sanitize_text_field( $form ) )
									);
								}
							}
							?>
						</ul>

						<?php if ( ! empty( $this->importer_forms ) ) : ?>
							<a href="#" class="all"><?php esc_html_e( 'Select All', 'wpforms-lite' ); ?></a>
						<?php endif; ?>

					</div>
					<div class="second-column">
						<h5 class="header"><?php esc_html_e( 'Forms to Import', 'wpforms-lite' ); ?></h5>
						<ul></ul>
					</div>
				</div>
			</div>

			<?php if ( ! empty( $this->importer_forms ) ) : ?>
				<p class="submit">
					<button class="wpforms-btn wpforms-btn-md wpforms-btn-orange"
							id="wpforms-importer-forms-submit"><?php esc_html_e( 'Import', 'wpforms-lite' ); ?></button>
				</p>
			<?php endif; ?>
		</div>
	<?php
	}

	/**
	 * Analyze block.
	 *
	 * @since 1.6.6
	 */
	private function analyze_block() {
		?>

		<div id="wpforms-importer-analyze">
			<p class="process-analyze">
				<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>
				<?php
				printf(
					wp_kses( /* translators: %s - provider name. */
						__( 'Analyzing <span class="form-current">1</span> of <span class="form-total">0</span> forms from %s.', 'wpforms-lite' ),
						[
							'span' => [
								'class' => [],
							],
						]
					),
					esc_attr( sanitize_text_field( $this->get_provider_name() ) )
				);
				?>
			</p>
			<div class="upgrade">
				<h5><?php esc_html_e( 'Heads up!', 'wpforms-lite' ); ?></h5>
				<p><?php esc_html_e( 'One or more of your forms contain fields that are not available in WPForms Lite. To properly import these fields, we recommend upgrading to WPForms Pro.', 'wpforms-lite' ); ?></p>
				<p><?php esc_html_e( 'You can continue with the import without upgrading, and we will do our best to match the fields. However, some of them will be omitted due to compatibility issues.', 'wpforms-lite' ); ?></p>
				<p>
					<a href="<?php echo esc_url( wpforms_admin_upgrade_link( 'tools-import' ) ); ?>" target="_blank"
					   rel="noopener noreferrer"
					   class="wpforms-btn wpforms-btn-md wpforms-btn-orange wpforms-upgrade-modal"><?php esc_html_e( 'Upgrade to WPForms Pro', 'wpforms-lite' ); ?></a>
					<a href="#" class="wpforms-btn wpforms-btn-md wpforms-btn-light-grey"
					   id="wpforms-importer-continue-submit"><?php esc_html_e( 'Continue Import without Upgrading', 'wpforms-lite' ); ?></a>
				</p>
				<hr>
				<p><?php esc_html_e( 'Below is the list of form fields that may be impacted:', 'wpforms-lite' ); ?></p>
			</div>
		</div>
	<?php
	}

	/**
	 * Process block.
	 *
	 * @since 1.6.6
	 */
	private function process_block() {
		?>

		<div id="wpforms-importer-process">

			<p class="process-count">
				<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>
				<?php
				printf(
					wp_kses( /* translators: %s - provider name. */
						__( 'Importing <span class="form-current">1</span> of <span class="form-total">0</span> forms from %s.', 'wpforms-lite' ),
						[
							'span' => [
								'class' => [],
							],
						]
					),
					esc_attr( sanitize_text_field( $this->get_provider_name() ) )
				);
				?>
			</p>

			<p class="process-completed">
				<?php
				echo wp_kses(
					__( 'Congrats, the import process has finished! We have successfully imported <span class="forms-completed"></span> forms. You can review the results below.', 'wpforms-lite' ),
					[
						'span' => [
							'class' => [],
						],
					]
				);
				?>
			</p>
			<div class="status"></div>
		</div>
	<?php
	}


	/**
	 * Various Underscores templates for form importing.
	 *
	 * @since 1.6.6
	 */
	public function importer_templates() {
		?>

		<script type="text/html" id="tmpl-wpforms-importer-upgrade">
			<# _.each( data, function( item, key ) { #>
				<ul>
					<li class="form">{{ item.name }}</li>
					<# _.each( item.fields, function( val, key ) { #>
						<li>{{ val }}</li>
						<# }) #>
				</ul>
				<# }) #>
		</script>
		<script type="text/html" id="tmpl-wpforms-importer-status-error">
			<div class="item">
				<div class="wpforms-clear">
					<span class="name">
						<i class="status-icon fa fa-times" aria-hidden="true"></i>
						{{ data.name }}
					</span>
				</div>
				<p>{{ data.msg }}</p>
			</div>
		</script>
		<script type="text/html" id="tmpl-wpforms-importer-status-update">
			<div class="item">
				<div class="wpforms-clear">
					<span class="name">
						<# if ( ! _.isEmpty( data.upgrade_omit ) ) { #>
							<i class="status-icon fa fa-exclamation-circle" aria-hidden="true"></i>
						<# } else if ( ! _.isEmpty( data.upgrade_plain ) ) { #>
							<i class="status-icon fa fa-exclamation-triangle" aria-hidden="true"></i>
						<# } else if ( ! _.isEmpty( data.unsupported ) ) { #>
							<i class="status-icon fa fa-info-circle" aria-hidden="true"></i>
						<# } else { #>
							<i class="status-icon fa fa-check" aria-hidden="true"></i>
						<# } #>
						{{ data.name }}
					</span>
					<span class="actions">
						<a href="{{ data.edit }}" target="_blank"><?php esc_html_e( 'Edit', 'wpforms-lite' ); ?></a>
						<span class="sep">|</span>
						<a href="{{ data.preview }}" target="_blank"><?php esc_html_e( 'Preview', 'wpforms-lite' ); ?></a>
					</span>
				</div>
				<# if ( ! _.isEmpty( data.upgrade_omit ) ) { #>
					<p><?php esc_html_e( 'The following fields are available in PRO and were not imported:', 'wpforms-lite' ); ?></p>
					<ul>
						<# _.each( data.upgrade_omit, function( val, key ) { #>
							<li>{{ val }}</li>
							<# }) #>
					</ul>
					<# } #>
						<# if ( ! _.isEmpty( data.upgrade_plain ) ) { #>
							<p><?php esc_html_e( 'The following fields are available in PRO and were imported as text fields:', 'wpforms-lite' ); ?></p>
							<ul>
								<# _.each( data.upgrade_plain, function( val, key ) { #>
									<li>{{ val }}</li>
									<# }) #>
							</ul>
							<# } #>
								<# if ( ! _.isEmpty( data.unsupported ) ) { #>
									<p><?php esc_html_e( 'The following fields are not supported and were not imported:', 'wpforms-lite' ); ?></p>
									<ul>
										<# _.each( data.unsupported, function( val, key ) { #>
											<li>{{ val }}</li>
											<# }) #>
									</ul>
									<# } #>
										<# if ( ! _.isEmpty( data.upgrade_plain ) || ! _.isEmpty( data.upgrade_omit ) ) { #>
											<p>
												<?php esc_html_e( 'Upgrade to the PRO plan to import these fields.', 'wpforms-lite' ); ?><br><br>
												<a href="<?php echo esc_url( wpforms_admin_upgrade_link( 'tools-import' ) ); ?>" class="wpforms-btn wpforms-btn-orange wpforms-btn-md wpforms-upgrade-modal" target="_blank" rel="noopener noreferrer">
													<?php esc_html_e( 'Upgrade Now', 'wpforms-lite' ); ?>
												</a>
											</p>
											<# } #>
			</div>
		</script>
		<?php
	}

}
