<?php if ( ! defined('ABSPATH')) {
    die;
} // Cannot access directly.
/**
 *
 * WP Customize custom panel
 *
 * @since 1.0.0
 * @version 1.0.0
 *
 */
if ( ! class_exists('WP_Customize_Panel_CSF') && class_exists('WP_Customize_Panel')) {
    class WP_Customize_Panel_CSF extends WP_Customize_Panel
    {
        public $type = 'csf';
    }
}

/**
 *
 * WP Customize custom section
 *
 * @since 1.0.0
 * @version 1.0.0
 *
 */
if ( ! class_exists('WP_Customize_Section_CSF') && class_exists('WP_Customize_Section')) {
    class WP_Customize_Section_CSF extends WP_Customize_Section
    {
        public $type = 'csf';
    }
}

/**
 *
 * WP Customize custom control
 *
 * @since 1.0.0
 * @version 1.0.0
 *
 */
if ( ! class_exists('WP_Customize_Control_CSF') && class_exists('WP_Customize_Control')) {
    class WP_Customize_Control_CSF extends WP_Customize_Control
    {

        public $type = 'csf';
        public $field = '';
        public $unique = '';

        public function render()
        {
            $depend  = '';
            $visible = '';

            if ( ! empty($this->field['dependency'])) {
                $dependency      = $this->field['dependency'];
                $depend_visible  = '';
                $data_controller = '';
                $data_condition  = '';
                $data_value      = '';
                $data_global     = '';

                if (is_array($dependency[0])) {
                    $data_controller = implode('|', array_column($dependency, 0));
                    $data_condition  = implode('|', array_column($dependency, 1));
                    $data_value      = implode('|', array_column($dependency, 2));
                    $data_global     = implode('|', array_column($dependency, 3));
                    $depend_visible  = implode('|', array_column($dependency, 4));
                } else {
                    $data_controller = ( ! empty($dependency[0])) ? $dependency[0] : '';
                    $data_condition  = ( ! empty($dependency[1])) ? $dependency[1] : '';
                    $data_value      = ( ! empty($dependency[2])) ? $dependency[2] : '';
                    $data_global     = ( ! empty($dependency[3])) ? $dependency[3] : '';
                    $depend_visible  = ( ! empty($dependency[4])) ? $dependency[4] : '';
                }

                $depend .= ' data-controller="' . esc_attr($data_controller) . '"';
                $depend .= ' data-condition="' . esc_attr($data_condition) . '"';
                $depend .= ' data-value="' . esc_attr($data_value) . '"';
                $depend .= ( ! empty($data_global)) ? ' data-depend-global="true"' : '';

                $visible = ' csf-dependency-control';
                $visible .= ( ! empty($depend_visible)) ? ' csf-depend-visible' : ' csf-depend-hidden';
            }

            $id    = 'customize-control-' . str_replace(array('[', ']'), array('-', ''), $this->id);
            $class = 'customize-control customize-control-' . $this->type . $visible;

            echo '<li id="' . esc_attr($id) . '" class="' . esc_attr($class) . '"' . $depend . '>';
            $this->render_field_content();
            echo '</li>';
        }

        public function render_field_content()
        {
            $complex = apply_filters('csf_customize_complex_fields', array(
                'accordion',
                'background',
                'border',
                'button_set',
                'checkbox',
                'color_group',
                'date',
                'dimensions',
                'fieldset',
                'group',
                'image_select',
                'link',
                'link_color',
                'media',
                'palette',
                'repeater',
                'sortable',
                'sorter',
                'spacing',
                'switcher',
                'tabbed',
                'typography'
            ));

            $field_id   = ( ! empty($this->field['id'])) ? $this->field['id'] : '';
            $custom     = ( ! empty($this->field['customizer'])) ? true : false;
            $is_complex = (in_array($this->field['type'], $complex)) ? true : false;
            $class      = ($is_complex || $custom) ? ' csf-customize-complex' : '';
            $atts       = ($is_complex || $custom) ? ' data-unique-id="' .
                esc_attr($this->unique) .
                '" data-option-id="' .
                esc_attr($field_id) .
                '"' : '';

            if ( ! $is_complex && ! $custom) {
                $this->field['attributes']['data-customize-setting-link'] = $this->settings['default']->id;
            }

            $this->field['name'] = $this->settings['default']->id;

            $this->field['dependency'] = array();

            echo '<div class="csf-customize-field' . esc_attr($class) . '"' . $atts . '>';

            CSF::field($this->field, $this->value(), $this->unique, 'customize');

            echo '</div>';
        }

    }
}
