<?php

namespace Elementor;

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

class Thim_Ekit_Widget_Courses extends Widget_Base {

	public function get_name() {
		return 'thim-courses';
	}

	public function get_title() {
		return esc_html__( 'Eduma List Courses', 'eduma' );
	}

	public function get_icon() {
		return 'thim-widget-icon thim-widget-icon-courses';
	}

	protected function get_html_wrapper_class() {
		return 'thim-widget-courses';
	}

	public function get_categories() {
		return [ 'eduma_ekit' ];
	}

	public function get_base() {
		return basename( __FILE__, '.php' );
	}

	// Get list courses category

	protected function register_controls() {
		$this->start_controls_section(
			'content',
			[
				'label' => esc_html__( 'Courses', 'eduma' ),
			]
		);

		$this->add_control(
			'title',
			[
				'label'       => esc_html__( 'Heading', 'eduma' ),
				'type'        => Controls_Manager::TEXT,
				'label_block' => true,
				'placeholder' => esc_html__( 'Add your text here', 'eduma' ),
			]
		);

		$this->add_control(
			'before_heading',
			[
				'label'     => esc_html__( 'Before Heading', 'eduma' ),
				'type'      => Controls_Manager::TEXT,
				'condition' => [
					'layout'                => [ 'item-tabs-slider' ],
					'item_tab_slider_style' => [ 'style_1' ],
				],
			]
		);

		$this->add_control(
			'layout',
			[
				'label'   => esc_html__( 'Layout', 'eduma' ),
				'type'    => Controls_Manager::SELECT,
				'options' => [
					'slider'            => esc_html__( 'Slider', 'eduma' ),
					'slider-instructor' => esc_html__( 'Slider - Instructor', 'eduma' ),
					'grid'              => esc_html__( 'Grid', 'eduma' ),
					'grid1'             => esc_html__( 'Grid New', 'eduma' ),
					'grid-instructor'   => esc_html__( 'Grid - Instructor', 'eduma' ),
					'list-sidebar'      => esc_html__( 'List Sidebar', 'eduma' ),
					'megamenu'          => esc_html__( 'Mega Menu', 'eduma' ),
					'tabs'              => esc_html__( 'Category Tabs', 'eduma' ),
					'tabs-slider'       => esc_html__( 'Category Tabs Slider', 'eduma' ),
					'item-tabs-slider'  => esc_html__( 'Category Item Tabs Slider', 'eduma' ),
				],
				'default' => 'slider',
			]
		);

		$this->add_control(
			'grid_hide_author',
			[
				'label'        => esc_html__( 'Hide Author', 'eduma' ),
				'type'         => Controls_Manager::SWITCHER,
				'label_on'     => esc_html__( 'Yes', 'eduma' ),
				'label_off'    => esc_html__( 'No', 'eduma' ),
				'return_value' => 'yes',
				'default'      => '',
				'condition'    => array(
					'layout' => [ 'grid-instructor' ],
				),
			]
		);

		$this->add_control(
			'item_tab_slider_style',
			[
				'label'     => esc_html__( 'Tabs Slider Style', 'eduma' ),
				'type'      => Controls_Manager::SELECT,
				'options'   => [
					'style_1' => esc_html__( 'Style 01', 'eduma' ),
					'style_2' => esc_html__( 'Style 02', 'eduma' ),
				],
				'default'   => 'style_1',
				'condition' => array(
					'layout' => [ 'item-tabs-slider' ],
				),
			]
		);

		$this->add_control(
			'order',
			[
				'label'   => esc_html__( 'Order By', 'eduma' ),
				'type'    => Controls_Manager::SELECT,
				'options' => [
					'popular'  => esc_html__( 'Popular', 'eduma' ),
					'latest'   => esc_html__( 'Latest', 'eduma' ),
					'category' => esc_html__( 'Category', 'eduma' ),
				],
				'default' => 'latest',
			]
		);

		$this->add_control(
			'cat_id',
			[
				'label'     => esc_html__( 'Select Category', 'eduma' ),
				'type'      => Controls_Manager::SELECT2,
				'options'   => thim_get_cat_taxonomy( 'course_category', array( 'all' => esc_html__( 'All', 'eduma' ) ) ),
				'condition' => array(
					'order' => [ 'category' ],
				),
			]
		);

		$this->add_control(
			'thumbnail_width',
			[
				'label'      => __( 'Thumbnail Width', 'eduma' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => [ 'px' ],
				'range'      => [
					'px' => [
						'min'  => 100,
						'max'  => 800,
						'step' => 1,
					],
				],
				'default'    => [
					'unit' => 'px',
					'size' => 400,
				],
				'condition'  => array(
					'layout' => [ 'slider', 'grid', 'grid1', 'tabs', 'tabs-slider', 'slider-instructor', 'grid-instructor' ],
				),
			]
		);

		$this->add_control(
			'thumbnail_height',
			[
				'label'      => __( 'Thumbnail Height', 'eduma' ),
				'type'       => Controls_Manager::SLIDER,
				'size_units' => [ 'px' ],
				'range'      => [
					'px' => [
						'min'  => 100,
						'max'  => 800,
						'step' => 1,
					],
				],
				'default'    => [
					'unit' => 'px',
					'size' => 300,
				],
				'condition'  => array(
					'layout' => [ 'slider', 'grid', 'grid1', 'tabs', 'tabs-slider', 'slider-instructor', 'grid-instructor' ],
				),
			]
		);

		$this->add_control(
			'limit',
			[
				'label'   => esc_html__( 'Limit Number Courses', 'eduma' ),
				'type'    => Controls_Manager::NUMBER,
				'default' => 8,
				'min'     => 1,
				'step'    => 1,
			]
		);

		$this->add_control(
			'featured',
			[
				'label'        => esc_html__( 'Display Featured Courses?', 'eduma' ),
				'type'         => Controls_Manager::SWITCHER,
				'label_on'     => esc_html__( 'Yes', 'eduma' ),
				'label_off'    => esc_html__( 'No', 'eduma' ),
				'return_value' => 'yes',
				'default'      => '',
			]
		);

		$this->add_control(
			'view_all_courses',
			[
				'label'     => esc_html__( 'View All Text', 'eduma' ),
				'type'      => Controls_Manager::TEXT,
				'condition' => array(
					'layout' => [ 'grid', 'grid1', 'tabs-slider', 'grid-instructor' ],
				),
			]
		);

		$this->add_control(
			'view_all_position',
			[
				'label'       => __( 'View All Position', 'eduma' ),
				'type'        => Controls_Manager::CHOOSE,
				'options'     => [
					'top'    => [
						'title' => __( 'Top', 'eduma' ),
						'icon'  => 'eicon-v-align-top',
					],
					'bottom' => [
						'title' => __( 'Bottom', 'eduma' ),
						'icon'  => 'eicon-v-align-bottom',
					],
				],
				'default'     => 'top',
				'toggle'      => false,
				'label_block' => false,
				'condition'   => array(
					'layout' => [ 'grid', 'grid1', 'tabs-slider', 'grid-instructor' ],
				),
			]
		);

		$this->end_controls_section();

		$this->start_controls_section(
			'slider-options',
			[
				'label'     => esc_html__( 'Slider Options', 'eduma' ),
				'condition' => array(
					'layout' => [ 'slider', 'slider-instructor', 'item-tabs-slider' ],
				),
			]
		);

		$this->add_control(
			'show_pagination',
			[
				'label'        => esc_html__( 'Show Pagination?', 'eduma' ),
				'type'         => Controls_Manager::SWITCHER,
				'label_on'     => esc_html__( 'Yes', 'eduma' ),
				'label_off'    => esc_html__( 'No', 'eduma' ),
				'return_value' => 'yes',
				'default'      => '',
			]
		);

		$this->add_control(
			'show_navigation',
			[
				'label'        => esc_html__( 'Show Navigation?', 'eduma' ),
				'type'         => Controls_Manager::SWITCHER,
				'label_on'     => esc_html__( 'Yes', 'eduma' ),
				'label_off'    => esc_html__( 'No', 'eduma' ),
				'return_value' => 'yes',
				'default'      => 'yes',
			]
		);

		$this->add_control(
			'item_visible',
			[
				'label'   => esc_html__( 'Limit Number Courses', 'eduma' ),
				'type'    => Controls_Manager::NUMBER,
				'default' => 4,
				'min'     => 1,
				'max'     => 6,
				'step'    => 1,
			]
		);

		$this->add_control(
			'auto_play',
			[
				'label'       => esc_html__( 'Auto Play Speed (in ms)', 'eduma' ),
				'description' => esc_html__( 'Set 0 to disable auto play.', 'eduma' ),
				'type'        => Controls_Manager::NUMBER,
				'default'     => 0,
				'min'         => 0,
				'step'        => 100,
			]
		);

		$this->end_controls_section();

		$this->start_controls_section(
			'grid-options',
			[
				'label'     => esc_html__( 'Grid Options', 'eduma' ),
				'condition' => array(
					'layout' => [ 'grid', 'grid1', 'grid-instructor' ],
				),
			]
		);

		$this->add_control(
			'columns',
			[
				'label'   => esc_html__( 'Columns', 'eduma' ),
				'type'    => Controls_Manager::NUMBER,
				'default' => 4,
				'min'     => 1,
				'max'     => 6,
				'step'    => 1,
			]
		);

		$this->end_controls_section();

		$this->start_controls_section(
			'tab-options',
			[
				'label'     => esc_html__( 'Tab Options', 'eduma' ),
				'condition' => array(
					'layout' => [ 'tabs', 'tabs-slider', 'item-tabs-slider' ],
				),
			]
		);

		$this->add_control(
			'limit_tab',
			[
				'label'     => esc_html__( 'Limit Items Per Tab', 'eduma' ),
				'type'      => Controls_Manager::NUMBER,
				'default'   => 4,
				'min'       => 1,
				'step'      => 1,
				'condition' => array(
					'layout' => [ 'tabs', 'tabs-slider' ],
				),
			]
		);

		$this->add_control(
			'cat_id_tab',
			[
				'label'       => esc_html__( 'Select Category Tabs', 'eduma' ),
				'label_block' => true,
				'type'        => Controls_Manager::SELECT2,
				'options'     => thim_get_cat_taxonomy( 'course_category' ),
				'multiple'    => true,
			]
		);

		$this->end_controls_section();

		$this->register_controls_setting_title();
		$this->register_controls_setting_read_more();
	}

	protected function register_controls_setting_title() {
		$this->start_controls_section(
			'title_settings',
			[
				'label' => esc_html__( 'Title', 'eduma' ),
				'tab'   => Controls_Manager::TAB_STYLE,
			]
		);
		$this->add_responsive_control(
			'title_margin',
			[
				'label'      => esc_html__( 'Margin', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', 'em', '%' ],
				'selectors'  => [
					'{{WRAPPER}} .widget-title' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			[
				'name'     => 'title_typography',
				'label'    => esc_html__( 'Typography', 'eduma' ),
				'selector' => '{{WRAPPER}} .widget-title',
			]
		);
		$this->add_control(
			'title_color',
			[
				'label'     => esc_html__( 'Text Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'default'   => '',
				'selectors' => [
					'{{WRAPPER}} .widget-title' => 'color: {{VALUE}};',
				],
			]
		);

		$this->end_controls_section();
	}

	protected function register_controls_setting_read_more() {
		$this->start_controls_section(
			'link_all_posts_style_tabs',
			[
				'label'     => esc_html__( 'Read More', 'eduma' ),
				'tab'       => Controls_Manager::TAB_STYLE,
				'condition' => array(
					'layout' => [ 'grid', 'grid1', 'tabs-slider', 'grid-instructor' ],
				),
			]
		);

		$this->add_responsive_control(
			'text_padding',
			[
				'label'      => esc_html__( 'Padding', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', 'em', '%' ],
				'selectors'  => [
					'{{WRAPPER}}.thim-widget-courses .view-all-courses' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_responsive_control(
			'text_margin',
			[
				'label'      => esc_html__( 'Margin', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', 'em', '%' ],
				'selectors'  => [
					'{{WRAPPER}}.thim-widget-courses .view-all-courses' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->add_group_control(
			Group_Control_Typography::get_type(),
			[
				'name'     => 'link_all_posts_typography',
				'label'    => esc_html__( 'Typography', 'eduma' ),
				'selector' => '{{WRAPPER}}.thim-widget-courses .view-all-courses',
			]
		);

		$this->add_responsive_control(
			'link_all_posts_style',
			[
				'label'     => esc_html_x( 'Border Type', 'Border Control', 'eduma' ),
				'type'      => Controls_Manager::SELECT,
				'options'   => [
					'none'   => esc_html__( 'None', 'eduma' ),
					'solid'  => esc_html_x( 'Solid', 'Border Control', 'eduma' ),
					'double' => esc_html_x( 'Double', 'Border Control', 'eduma' ),
					'dotted' => esc_html_x( 'Dotted', 'Border Control', 'eduma' ),
					'dashed' => esc_html_x( 'Dashed', 'Border Control', 'eduma' ),
					'groove' => esc_html_x( 'Groove', 'Border Control', 'eduma' ),
				],
				'default'   => 'none',
				'selectors' => [
					'{{WRAPPER}}.thim-widget-courses .view-all-courses' => 'border-style: {{VALUE}};',
				],
			]
		);

		$this->add_responsive_control(
			'border_dimensions',
			[
				'label'     => esc_html_x( 'Width', 'Border Control', 'eduma' ),
				'type'      => Controls_Manager::DIMENSIONS,
				'condition' => [
					'link_all_posts_style!' => 'none',
				],
				'selectors' => [
					'{{WRAPPER}}.thim-widget-courses .view-all-courses' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);

		$this->start_controls_tabs( 'tabs_color_link_all_posts_style' );
		$this->start_controls_tab(
			'tab_color_link_normal',
			[
				'label' => esc_html__( 'Normal', 'eduma' ),
			]
		);
		$this->add_control(
			'read_more_text_color',
			[
				'label'     => __( 'Text Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}}.thim-widget-courses .view-all-courses' => 'color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'border_read_more_text',
			[
				'label'     => __( 'Border Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'condition' => [
					'link_all_posts_style!' => 'none',
				],
				'selectors' => [
					'{{WRAPPER}}.thim-widget-courses .view-all-courses' => 'border-color: {{VALUE}};',
				],
			]
		);

		$this->add_control(
			'bg_read_more_text',
			[
				'label'     => __( 'Background Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}}.thim-widget-courses .view-all-courses' => 'background-color: {{VALUE}};',
				],
			]
		);

		$this->add_responsive_control(
			'border_radius',
			[
				'label'      => esc_html__( 'Border Radius', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', '%' ],
				'default'    => [
					'top'    => '',
					'right'  => '',
					'bottom' => '',
					'left'   => '',
				],
				'selectors'  => [
					'{{WRAPPER}}.thim-widget-courses .view-all-courses' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);
		$this->end_controls_tab();

		$this->start_controls_tab(
			'tab_color_link_hover',
			[
				'label' => esc_html__( 'Hover', 'eduma' ),
			]
		);
		$this->add_control(
			'read_more_text_color_hover',
			[
				'label'     => __( 'Text Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}}.thim-widget-courses .view-all-courses:hover' => 'color: {{VALUE}};',
				],
			]
		);
		$this->add_control(
			'border_read_more_text_hover',
			[
				'label'     => __( 'Border Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'condition' => [
					'link_all_posts_style!' => 'none',
				],
				'selectors' => [
					'{{WRAPPER}}.thim-widget-courses .view-all-courses:hover' => 'border-color: {{VALUE}};',
				],
			]
		);
		$this->add_control(
			'bg_read_more_text_hover',
			[
				'label'     => __( 'Background Color', 'eduma' ),
				'type'      => Controls_Manager::COLOR,
				'selectors' => [
					'{{WRAPPER}}.thim-widget-courses .view-all-courses:hover' => 'background-color: {{VALUE}};',
				],
			]
		);
		$this->add_responsive_control(
			'border_radius_h',
			[
				'label'      => esc_html__( 'Border Radius', 'eduma' ),
				'type'       => Controls_Manager::DIMENSIONS,
				'size_units' => [ 'px', '%' ],
				'selectors'  => [
					'{{WRAPPER}}.thim-widget-courses .view-all-courses:hover' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
				],
			]
		);
		$this->end_controls_tab();
		$this->end_controls_tabs();
		$this->end_controls_section();
	}

	protected function render() {
		$settings = $this->get_settings_for_display();

		// Map variables between Elementor and SiteOrigin
		$settings['thumbnail_width']  = isset( $settings['thumbnail_width'] ) ? $settings['thumbnail_width']['size'] : '';
		$settings['thumbnail_height'] = isset( $settings['thumbnail_height'] ) ? $settings['thumbnail_height']['size'] : '';
		$settings['slider-options']   = array(
			'show_pagination' => $settings['show_pagination'],
			'show_navigation' => $settings['show_navigation'],
			'item_visible'    => $settings['item_visible'],
			'auto_play'       => $settings['auto_play'],
		);
		$settings['grid-options']     = array(
			'columns' => $settings['columns'],
		);
		$settings['tabs-options']     = array(
			'limit_tab'  => $settings['limit_tab'],
			'cat_id_tab' => $settings['cat_id_tab'],
		);

		$layout = $settings['layout'] . '-v3';

		$args                 = array();
		$args['before_title'] = '<h3 class="widget-title">';
		$args['after_title']  = '</h3>';
		$args['condition']    = $this->render_query_post( $settings );

		thim_ekit_get_widget_template(
			$this->get_base(),
			array(
				'instance' => $settings,
				'args'     => $args,
			),
			$layout
		);
	}

	protected function render_query_post( $settings ) {
		// query
		$limit     = $settings['limit'];
		$sort      = $settings['order'];
		$feature   = ! empty( $settings['featured'] ) ? true : false;
		$condition = array(
			'post_type'           => 'lp_course',
			'posts_per_page'      => $limit,
			'ignore_sticky_posts' => true,
		);
		if ( $sort == 'category' && $settings['cat_id'] && $settings['cat_id'] != 'all' ) {
			if ( get_term( $settings['cat_id'], 'course_category' ) ) {
				$condition['tax_query'] = array(
					array(
						'taxonomy' => 'course_category',
						'field'    => 'term_id',
						'terms'    => $settings['cat_id'],
					),
				);
			}
		}
		if ( $sort == 'popular' ) {
			$post_in               = eduma_lp_get_popular_courses( $limit );
			$condition['post__in'] = $post_in;
			$condition['orderby']  = 'post__in';
		}

		if ( $feature ) {
			$condition['meta_query'] = array(
				array(
					'key'   => '_lp_featured',
					'value' => 'yes',
				),
			);
		}

		return $condition;
	}
}
