<?php
/**
 * Redux Accordion Field Class
 *
 * @package Redux Extentions
 * @author  Kevin Provance <kevin.provance@gmail.com>
 * @class   Redux_Accordion
 */

defined( 'ABSPATH' ) || exit;

// Don't duplicate me!
if ( ! class_exists( 'Redux_Accordion' ) ) {

	/**
	 * Main ReduxFramework_Accordion class
	 *
	 * @since       1.0.0
	 */
	class Redux_Accordion extends Redux_Field {

		/**
		 * Set field defaults.
		 */
		public function set_defaults() {
			$defaults = array(
				'position'   => 'end',
				'style'      => '',
				'class'      => '',
				'title'      => '',
				'subtitle'   => '',
				'open'       => '',
				'open-icon'  => 'el-plus',
				'close-icon' => 'el-minus',
			);

			$this->field = wp_parse_args( $this->field, $defaults );
		}

		/**
		 * Field Render Function.
		 * Takes the vars and outputs the HTML for the field in the settings
		 *
		 * @since       1.0.0
		 * @access      public
		 * @return      void
		 */
		public function render() {
			$guid      = uniqid();
			$field_pos = '';
			$add_class = '';

			// primary container.
			if ( 'start' === $this->field['position'] ) {
				$add_class = ' form-table-accordion';
				$field_pos = 'start';
			} elseif ( 'end' === $this->field['position'] ) {
				$add_class = ' hide';
				$field_pos = 'end';
			}

			echo '<input type="hidden" id="accordion-' . esc_attr( $this->field['id'] ) . '-marker" data-open-icon="' . esc_attr( $this->field['open-icon'] ) . '" data-close-icon="' . esc_attr( $this->field['close-icon'] ) . '"></td></tr></table>';

			$is_open = false;
			if ( isset( $this->field['open'] ) && true === $this->field['open'] ) {
				$is_open = true;
			}

			echo '<div data-state="' . esc_attr( $is_open ) . '" data-position="' . esc_attr( $field_pos ) . '" id="' . esc_attr( $this->field['id'] ) . '" class="redux-accordion-field redux-field ' . esc_attr( $this->field['style'] ) . esc_attr( $this->field['class'] ) . '">';
			echo '<div class="control">';
			echo '<div class="redux-accordion-info' . esc_attr( $add_class ) . '">';

			if ( ! empty( $this->field['title'] ) ) {
				echo '<h3>' . esc_html( $this->field['title'] ) . '</h3>';
			}

			$icon_class = '';
			if ( ! empty( $this->field['subtitle'] ) ) {
				echo '<div class="redux-accordion-desc">' . esc_html( $this->field['subtitle'] ) . '</div>';
				$icon_class = ' subtitled';
			}

			echo '<span class="el el-plus' . esc_attr( $icon_class ) . '"></span>';
			echo '</div>';
			echo '</div>';
			echo '</div>';
			echo '<table id="accordion-table-' . esc_attr( $this->field['id'] ) . '" data-id="' . esc_attr( $this->field['id'] ) . '" class="form-table form-table-accordion no-border' . esc_attr( $add_class ) . '"><tbody><tr class="hide"><th></th><td id="' . esc_attr( $guid ) . '">';
		}

		/**
		 * Enqueue Function.
		 * If this field requires any scripts, or css define this function and register/enqueue the scripts/css
		 *
		 * @since       1.0.0
		 * @access      public
		 * @return      void
		 */
		public function enqueue() {

			// Set up min files for dev_mode = false.
			$min = Redux_Functions::isMin();

			// Field dependent JS.
			wp_enqueue_script(
				'redux-field-accordion',
				$this->url . 'redux-accordion' . $min . '.js',
				array( 'jquery', 'redux-js' ),
				Redux_Extension_Accordion::$version,
				true
			);

			// Field CSS.
			if ( $this->parent->args['dev_mode'] ) {
				wp_enqueue_style(
					'redux-field-accordion',
					$this->url . 'redux-accordion.css',
					array(),
					Redux_Extension_Accordion::$version
				);
			}
		}
	}
}
