<?php
/**
 * Customizer Control: slider.
 */

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

if ( ! class_exists( 'Bootstrap_Coach_Slider_Control' ) ) {

	/**
	 * Slider control (range).
	 */
	class Bootstrap_Coach_Slider_Control extends Wp_Customize_Control {

		public $type = 'slider';

		public $tooltip = '';

		public function to_json() {
			parent::to_json();

			if ( isset( $this->default ) ) {
				$this->json['default'] = $this->default;
			} else {
				$this->json['default'] = $this->setting->default;
			}

			$this->json['value']   = $this->value();
			$this->json['choices'] = $this->choices;
			$this->json['link']    = $this->get_link();
			$this->json['tooltip'] = $this->tooltip;

			$this->json['inputAttrs'] = '';
			foreach ( $this->input_attrs as $attr => $value ) {
				$this->json['inputAttrs'] .= $attr . '="' . esc_attr( $value ) . '" ';
			}

			$this->json['choices']['min']  = ( isset( $this->choices['min'] ) ) ? $this->choices['min'] : '0';
			$this->json['choices']['max']  = ( isset( $this->choices['max'] ) ) ? $this->choices['max'] : '100';
			$this->json['choices']['step'] = ( isset( $this->choices['step'] ) ) ? $this->choices['step'] : '1';
			$this->json['choices']['max_text']  = isset( $this->choices['max_text'] ) ? $this->choices['max_text'] : '';
			$this->json['choices']['max_value'] = isset( $this->choices['max_value'] ) ? $this->choices['max_value'] : '';

			$max            = (int) $this->json['choices']['max'];
			$stored_value   = $this->value();
			$has_max_text   = ! empty( $this->json['choices']['max_text'] ) && ! empty( $this->json['choices']['max_value'] );
			$is_textual_value = $has_max_text && (string) $stored_value === (string) $this->json['choices']['max_value'];

			$this->json['inputValue']      = $is_textual_value ? $max : $stored_value;
			$this->json['displayValue']    = $is_textual_value ? $this->json['choices']['max_text'] : $stored_value;
			$this->json['resetInputValue'] = $has_max_text && (string) $this->setting->default === (string) $this->json['choices']['max_value']
				? $max
				: $this->setting->default;
		}

		public function enqueue() {
			wp_enqueue_style( 'bootstrap-coach-slider', get_template_directory_uri() . '/inc/custom-controls/slider/slider.css', null );
			wp_enqueue_script( 'bootstrap-coach-slider', get_template_directory_uri() . '/inc/custom-controls/slider/slider.js', array( 'jquery' ), false, true );
		}

		protected function content_template() {
			?>
			<# if ( data.tooltip ) { #>
				<a href="#" class="tooltip hint--left" data-hint="{{ data.tooltip }}"><span class='dashicons dashicons-info'></span></a>
			<# } #>
			<label>
				<# if ( data.label ) { #>
					<span class="customize-control-title">{{{ data.label }}}</span>
				<# } #>
				<# if ( data.description ) { #>
					<span class="description customize-control-description">{{{ data.description }}}</span>
				<# } #>
				<div class="wrapper" data-max-text="{{ data.choices.max_text }}" data-max-value="{{ data.choices.max_value }}" data-max="{{ data.choices.max }}">
					<input {{{ data.inputAttrs }}} type="range" min="{{ data.choices['min'] }}" max="{{ data.choices['max'] }}" step="{{ data.choices['step'] }}" value="{{ data.inputValue }}" <# if ( ! data.choices.max_text ) { #>{{{ data.link }}}<# } #> data-reset_value="{{ data.default }}" data-reset_input="{{ data.resetInputValue }}" />
					<div class="range_value">
						<# if ( data.choices.max_text && data.displayValue === data.choices.max_text ) { #>
							<span class="value">{{ data.choices.max_text }}</span>
						<# } else { #>
							<span class="value">{{ data.displayValue }}</span>
							<# if ( data.choices['suffix'] ) { #>
								{{ data.choices['suffix'] }}
							<# } #>
						<# } #>
					</div>
					<div class="slider-reset">
						<span class="dashicons dashicons-image-rotate"></span>
					</div>
				</div>
			</label>
			<?php
		}
	}
}
