<?php
namespace Jet_Engine\Modules\Rest_API_Listings\Listings;

use Jet_Engine\Modules\Rest_API_Listings\Module;

// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
	die;
}

class Elementor {

	public $manager;

	public function __construct( $manager ) {

		$this->manager = $manager;

		add_filter(
			'jet-engine/listings/dynamic-image/fields',
			array( $this, 'add_image_source_fields' ), 10, 2
		);

		add_filter(
			'jet-engine/listings/dynamic-link/fields',
			array( $this->manager, 'add_source_fields' ),
			10, 2
		);

		add_action(
			'jet-engine/listings/document/get-preview/' . $this->manager->source,
			array( $this->manager, 'setup_preview' )
		);

		add_action(
			'jet-engine/listings/document/custom-source-control',
			array( $this, 'add_document_controls' )
		);

		add_action(
			'elementor/document/after_save',
			array( $this, 'update_settings_on_document_save' ),
			10, 2
		);

		add_action(
			'jet-engine/listing/custom-query-settings',
			array( $this, 'register_query_settings' )
		);

		add_action(
			'jet-engine/elementor-views/dynamic-tags/register',
			array( $this, 'register_dynamic_tags' )
		);

	}

	/**
	 * Register REST API related Dynamic tags
	 *
	 * @param  [type] $tags_module [description]
	 * @return [type]              [description]
	 */
	public function register_dynamic_tags( $tags_module ) {

		require_once Module::instance()->module_path( 'listings/dynamic-tags/field-tag.php' );
		require_once Module::instance()->module_path( 'listings/dynamic-tags/image-tag.php' );

		$tags_module->register_tag( new Dynamic_Tags\Field_Tag() );
		$tags_module->register_tag( new Dynamic_Tags\Image_Tag() );

	}

	/**
	 * Resgister query settings for the listig grid widget
	 */
	public function register_query_settings( $widget ) {

		$widget->start_controls_section(
			'section_jet_rest_query',
			array(
				'label' => __( 'REST API Query', 'jet-engine' ),
			)
		);

		$widget->add_control(
			'jet_rest_query',
			array(
				'label'       => __( 'Query Arguments', 'jet-engine' ),
				'type'        => \Elementor\Controls_Manager::TEXTAREA,
				'default'     => '',
				'description' => __( 'Enter each argument in a separate line. Arguments format - argument_name=argument_value', 'jet-engine' ),
			)
		);

		$widget->end_controls_section();

	}

	public function update_settings_on_document_save( $document, $data ) {

		if ( empty( $data['settings'] ) || empty( $data['settings']['listing_source'] ) ) {
			return;
		}

		if ( $this->manager->source !== $data['settings']['listing_source'] ) {
			return;
		}

		if ( $data['settings']['rest_api_endpoint'] === $data['settings']['listing_post_type'] ) {
			return;
		}

		$prev_data = get_post_meta( $document->get_main_id(), '_elementor_page_settings', true );

		if ( ! empty( $data['settings']['rest_api_endpoint'] ) ) {
			$prev_data['listing_post_type'] = $data['settings']['rest_api_endpoint'];
		} else {
			$prev_data['rest_api_endpoint'] = $data['settings']['listing_post_type'];
		}

		update_post_meta( $document->get_main_id(), '_elementor_page_settings', wp_slash( $prev_data ) );

	}

	/**
	 * Add document-specific controls
	 */
	public function add_document_controls( $document ) {

		$endpoints = array( '' => __( 'Select endpoint...', 'jet-engine' ) );

		foreach ( Module::instance()->settings->get() as $endpoint ) {
			$endpoints[ $endpoint['id'] ] = $endpoint['name'] . ', ' . $endpoint['url'];
		}

		$document->add_control(
			'rest_api_endpoint',
			array(
				'label'       => esc_html__( 'Endpoint:', 'jet-engine' ),
				'type'        => \Elementor\Controls_Manager::SELECT,
				'default'     => '',
				'options'     => $endpoints,
				'label_block' => true,
				'condition'   => array(
					'listing_source' => $this->manager->source,
				),
			)
		);

	}

	/**
	 * Register content types media fields
	 *
	 * @param [type] $groups [description]
	 */
	public function add_image_source_fields( $groups, $for ) {
		return $this->manager->add_source_fields( $groups );
	}

}
