<?php



use Elementor\Widget_Base;
use Elementor\Controls_Manager;

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


class Productscarouselthirdstkaveh extends Widget_Base{

  public function get_name(){
    return 'productscarouselthirdstkaveh';
  }
 
  public function get_title(){
    return esc_html__( 'Products Carousel Style Three', 'kavehTheme' );
  }

  public function get_icon(){
    return 'eicon-archive-posts';
  }

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

  protected function register_controls(){
    
    $this->start_controls_section(
        'contentproductscarouselthirdstkaveh',
        [
          'label' => esc_html__( 'Title Settings', 'kavehTheme' ),
                  'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
        ]
      );
  
      $this->add_control(
          'titleproductscarouselthirdstkaveh',
          [
              'label' => esc_html__( 'Title', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::TEXT,
          'default' => esc_html__( 'Best Selling Products', 'kavehTheme' ),
      
          ]
      );
      $this->add_control(
        'tagheadingproductscarouselthirdstkaveh',
        [
          'label' => esc_html__( 'Title Tag', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::SELECT,
          'default' => 'H3',
          'options' => [
            'H1'  => esc_html__( 'H1', 'kavehTheme' ),
            'H2' => esc_html__( 'H2', 'kavehTheme' ),
            'H3' => esc_html__( 'H3', 'kavehTheme' ),
            'H4' => esc_html__( 'H4', 'kavehTheme' ),
            'H5' => esc_html__( 'H5', 'kavehTheme' ),
            'H6' => esc_html__( 'H6', 'kavehTheme' ),
            'p' => esc_html__( 'p', 'kavehTheme' ),
            'div' => esc_html__( 'div', 'kavehTheme' ),
            'span' => esc_html__( 'span', 'kavehTheme' ),
          ],
        ]
      );
      $this->end_controls_section();

      $this->start_controls_section(
        'content2productscarouselthirdstkaveh',
        [
          'label' => esc_html__( 'Product Settings', 'kavehTheme' ),
                  'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
        ]
      );
  $this->add_control(
    'stylecartproductscarouselthirdstkaveh',
    [
      'label' => esc_html__( 'Product Box Layout', 'kavehTheme' ),
      'type' => \Elementor\Controls_Manager::SELECT,
      'default' => 'one',
        'options' => [
          'one'  => esc_html__( 'Layout One', 'kavehTheme' ),
           'two'  => esc_html__( 'Layout Two', 'kavehTheme' ),
           'three'  => esc_html__( 'Layout Three', 'kavehTheme' ),
           'four'  => esc_html__( 'Layout Four', 'kavehTheme' ),
           'five'  => esc_html__( 'Layout Five', 'kavehTheme' ),
           'six'  => esc_html__( 'Layout Six', 'kavehTheme' ),
           'seven'  => esc_html__( 'Layout Seven', 'kavehTheme' ),
           'eight'  => esc_html__( 'Layout Eight', 'kavehTheme' ),
           'nine'  => esc_html__( 'Layout Nine', 'kavehTheme' ),
           'ten'  => esc_html__( 'Layout Ten', 'kavehTheme' ),
           'eleven'  => esc_html__( 'Layout Eleven', 'kavehTheme' ),
           'twelve'  => esc_html__( 'Layout Twelve', 'kavehTheme' ),
           'thirteen'  => esc_html__( 'Layout Thirteen', 'kavehTheme' ),
           'fourteen'  => esc_html__( 'Layout Fourteen', 'kavehTheme' ),
           'fifteen'  => esc_html__( 'Layout Fifteen', 'kavehTheme' ),
           'sixteen'  => esc_html__( 'Layout Sixteen', 'kavehTheme' ),
           'seventeen'  => esc_html__( 'Layout Seventeen', 'kavehTheme' ),
           'eighteen'  => esc_html__( 'Layout Eighteen', 'kavehTheme' ),
           'nineteen'  => esc_html__( 'Layout Nineteen', 'kavehTheme' ),
           'twenty'  => esc_html__( 'Layout Twenty', 'kavehTheme' ),
           'twenty-one'  => esc_html__( 'Layout Twenty-One', 'kavehTheme' ),
           'twenty-two'  => esc_html__( 'Layout Twenty-Two', 'kavehTheme' ),
           'twenty-three'  => esc_html__( 'Layout Twenty-Three', 'kavehTheme' ),
           'twenty-four'  => esc_html__( 'Layout Twenty-Four', 'kavehTheme' ),
           'twenty-five'  => esc_html__( 'Layout Twenty-Five', 'kavehTheme' ),
           'twenty-six'  => esc_html__( 'Layout Twenty-Six', 'kavehTheme' ),
           'twenty-seven'  => esc_html__( 'Layout Twenty-Seven', 'kavehTheme' ),
           'twenty-eight'  => esc_html__( 'Layout Twenty-Eight', 'kavehTheme' ),
        ],
    ]
    );
    $this->add_control(
      'kaveh_exclude_out_of_stock',
      [
        'label' => esc_html__( 'Hide Out of Stock Products', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::SWITCHER,
          'yes' => esc_html__( 'Yes', 'kavehTheme' ),
           'no' => esc_html__( 'No', 'kavehTheme' ),
        'return_value' => 'yes',
        'default' => 'yes',
      ]
    );
    $this->add_control(
      'pproductscarouselthirdstkaveh',
      [
        'label' => esc_html__( 'Show Products', 'kavehTheme' ),
        'type' => \Elementor\Controls_Manager::SELECT,
        'default' => 'all',
        'options' => [
          'all'  => esc_html__( 'All', 'kavehTheme' ),
            'cat'  => esc_html__( 'Category', 'kavehTheme' ),
  
        ],
      ]
      );
      $this->add_control(
        'psortproductscarouselthirdstkaveh',
        [
          'label' => esc_html__( 'Sort Products By', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::SELECT,
          'default' => 'date',
          'options' => [
            'date'  => esc_html__( 'Date', 'kavehTheme' ),
            '_price'  => esc_html__( 'Price', 'kavehTheme' ),
            '_wc_average_rating'  => esc_html__( 'Most Popular', 'kavehTheme' ),
            'total_sales'  => esc_html__( 'Sales Amount', 'kavehTheme' ),
    
          ],
        ]
        );
        $this->add_control(
          'psortiproductscarouselthirdstkaveh',
          [
            'label' => esc_html__( 'Sort Type', 'kavehTheme' ),
            'type' => \Elementor\Controls_Manager::SELECT,
            'default' => 'desc',
            'options' => [
              'asc'  => esc_html__( 'Ascending', 'kavehTheme' ),
            'desc'  => esc_html__( 'Descending', 'kavehTheme' ),
            ],
          ]
          );
  $options2 = array();
$orderby = 'name';
$order = 'asc';
$hide_empty = false ;
$cat_args = array(
    'orderby'    => $orderby,
    'order'      => $order,
    'hide_empty' => $hide_empty,
);

$product_categories = get_terms( 'product_cat', $cat_args );

foreach ( $product_categories as $key => $category ) {
    $options2[$category->term_id] = $category->name;
}
$this->add_control(
    'catproductscarouselthirdstkaveh',
    [
      'label' => esc_html__( 'Select Category', 'kavehTheme' ),
      'type' => \Elementor\Controls_Manager::SELECT2, 
      'multiple' => true,
      'options' => $options2,
      'condition' => [
        'pproductscarouselthirdstkaveh' => 'cat',
      ],
    ]
);
$this->end_controls_section();

$this->start_controls_section(
  'content3productscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Carousel Settings', 'kavehTheme' ),
            'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
  ]
);
$this->add_control(
  'productnumberproductscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Number of Products Displayed', 'kavehTheme' ),
    'type' => \Elementor\Controls_Manager::NUMBER,
    'min' => 0,
    'max' => 50,
    'step' => 1,
    'default' => 5,
  ]
);
$this->add_control(
  'productcolumnproductscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Number of Product Columns on Desktop', 'kavehTheme' ),
    'type' => \Elementor\Controls_Manager::NUMBER,
    'min' => 0,
    'max' => 5,
    'step' => 1,
    'default' => 4,

  ]
);
$this->add_control(
  'productcolumn2productscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Number of Product Columns on Tablet', 'kavehTheme' ),
    'type' => \Elementor\Controls_Manager::NUMBER,
    'min' => 0,
    'max' => 5,
    'step' => 1,
    'default' => 3,

  ]
);
$this->add_control(
  'productcolumn3productscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Number of Product Columns on Mobile', 'kavehTheme' ),
    'type' => \Elementor\Controls_Manager::NUMBER,
    'min' => 0,
    'max' => 5,
    'step' => 1,
    'default' => 1,

  ]
);
$this->add_control(
  'autoplayproductscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Enable Autoplay', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::SWITCHER,
          'yes' => esc_html__( 'Yes', 'kavehTheme' ),
           'no' => esc_html__( 'No', 'kavehTheme' ),
    'return_value' => 'yes',
    'default' => 'no',
  ]
);
$this->add_control(
  'autoplaydelayproductscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Autoplay Delay (milliseconds)', 'kavehTheme' ),
    'type' => \Elementor\Controls_Manager::NUMBER,
    'min' => 1000,
    'max' => 10000,
    'step' => 500,
    'default' => 3000,
    'condition' => [
      'autoplayproductscarouselthirdstkaveh' => 'yes',
    ],
  ]
);
$this->add_control(
  'pauseonhoverproductscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Pause on Hover', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::SWITCHER,
          'yes' => esc_html__( 'Yes', 'kavehTheme' ),
           'no' => esc_html__( 'No', 'kavehTheme' ),
    'return_value' => 'yes',
    'default' => 'yes',
    'condition' => [
      'autoplayproductscarouselthirdstkaveh' => 'yes',
    ],
  ]
);
$this->add_control(
  'loopproductscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Infinite Loop', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::SWITCHER,
          'yes' => esc_html__( 'Yes', 'kavehTheme' ),
           'no' => esc_html__( 'No', 'kavehTheme' ),
    'return_value' => 'yes',
    'default' => 'yes',
  ]
);
$this->add_control(
  'speedproductscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Transition Speed (milliseconds)', 'kavehTheme' ),
    'type' => \Elementor\Controls_Manager::NUMBER,
    'min' => 300,
    'max' => 3000,
    'step' => 100,
    'default' => 300,
  ]
);
$this->add_control(
  'centeredslidesproductscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Centered Slides', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::SWITCHER,
          'yes' => esc_html__( 'Yes', 'kavehTheme' ),
           'no' => esc_html__( 'No', 'kavehTheme' ),
    'return_value' => 'yes',
    'default' => 'no',
  ]
);
$this->add_control(
  'freemodeproductscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Free Mode', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::SWITCHER,
          'yes' => esc_html__( 'Yes', 'kavehTheme' ),
           'no' => esc_html__( 'No', 'kavehTheme' ),
          'return_value' => 'yes',
          'default' => 'no',
          'description' => esc_html__( 'Slides move freely', 'kavehTheme' ),
  ]
);
$this->add_control(
  'effectproductscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Transition Effect', 'kavehTheme' ),
    'type' => \Elementor\Controls_Manager::SELECT,
    'default' => 'slide',
    'options' => [
      'slide' => esc_html__( 'Slide', 'kavehTheme' ),
           'fade' => esc_html__( 'Fade', 'kavehTheme' ),
           'cube' => esc_html__( 'Cube', 'kavehTheme' ),
           'coverflow' => esc_html__( 'Coverflow', 'kavehTheme' ),
           'flip' => esc_html__( 'Flip', 'kavehTheme' ),
    ],
  ]
);
$this->add_control(
  'showarrowproductscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Show Arrows?', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::SWITCHER,
          'yes' => esc_html__( 'Yes', 'kavehTheme' ),
           'no' => esc_html__( 'No', 'kavehTheme' ),
    'return_value' => 'yes',
    'default' => 'no',
  ]
);
$this->add_control(
  'showdotsproductscarouselthirdstkaveh',
  [
    'label' => esc_html__( 'Show Pagination Dots', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::SWITCHER,
          'yes' => esc_html__( 'Yes', 'kavehTheme' ),
           'no' => esc_html__( 'No', 'kavehTheme' ),
    'return_value' => 'yes',
    'default' => 'no',
  ]
);
       $this->end_controls_section();
       $this->start_controls_section(
        'style_productscarouselthirdstkaveh',
        [
          'label' => esc_html__( 'Title Style', 'kavehTheme' ),
          'tab' => \Elementor\Controls_Manager::TAB_STYLE,
        ]
      );
      $this->add_control(
        'textcolor2productscarouselthirdstkaveh',
        [
          'label' => esc_html__( 'Title Color', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::COLOR,
          'selectors' => [
            '{{WRAPPER}} .products-category-title' => 'color: {{VALUE}}',
          ],
        ]
      );
      $this->add_group_control(
        \Elementor\Group_Control_Typography::get_type(),
        [
          'name' => 'titleproductscarouselthirdstkaveh',
          'label' => esc_html__( 'Title Typography', 'kavehTheme' ),
          'selector' => '{{WRAPPER}} .products-category-title',
        ]
      );
      $this->end_controls_section();
      $this->start_controls_section(
        'style2_productscarouselthirdstkaveh',
        [
          'label' => esc_html__( 'Box Style', 'kavehTheme' ),
          'tab' => \Elementor\Controls_Manager::TAB_STYLE,
        ]
      );
      $this->add_control(
        'bordercolorrproductscarouselthirdstkaveh',
        [
          'label' => esc_html__( 'Border Color', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::COLOR,
          'selectors' => [
            '{{WRAPPER}} .products-category-wrapper::after ' => 'border: 1px solid  {{VALUE}}',
          ],
        ]
      );
      
      $this->add_control(
        'dotscolorrproductscarouselthirdstkaveh',
        [
          'label' => esc_html__( 'Dots Color', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::COLOR,
          'selectors' => [
            '{{WRAPPER}} .products-category-title::after' => 'background-color : {{VALUE}}',
            '{{WRAPPER}} .products-category-title::before' => 'background-color : {{VALUE}}',
          ],
        ]
      );
      
      $this->add_control(
        'arrowbackproductscarouselthirdstkaveh',
        [
          'label' => esc_html__( 'Arrows Background Color', 'kavehTheme' ),
          'type' => \Elementor\Controls_Manager::COLOR,
          'selectors' => [
            '{{WRAPPER}} .products-category .swiper-button-next' => 'background-color : {{VALUE}}',
            '{{WRAPPER}} .products-category .swiper-button-prev' => 'background-color : {{VALUE}}',
          ],
        ]
      );
      
      $this->end_controls_section();

        }


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

<section class="products-category">
      <div class="container">
        <div class="products-category-wrapper position-relative">
          <<?php echo  esc_attr($settings['tagheadingproductscarouselthirdstkaveh']); ?> class="products-category-title mx-auto position-relative">
            <span> <?php echo  esc_html($settings['titleproductscarouselthirdstkaveh']); ?> </span>
          </<?php echo  esc_attr($settings['tagheadingproductscarouselthirdstkaveh']); ?>>
          <div class="swiper swiper-products-category swiper-shadow overflow-hidden" data-swiper='<?php echo json_encode([
            "loop" => $settings['loopproductscarouselthirdstkaveh'] === "yes",
            "autoplay" => $settings['autoplayproductscarouselthirdstkaveh'] === "yes" ? [
              "delay" => intval($settings['autoplaydelayproductscarouselthirdstkaveh']),
              "pauseOnMouseEnter" => $settings['pauseonhoverproductscarouselthirdstkaveh'] === "yes"
            ] : false,
            "speed" => intval($settings['speedproductscarouselthirdstkaveh']),
            "effect" => $settings['effectproductscarouselthirdstkaveh'],
            "centeredSlides" => $settings['centeredslidesproductscarouselthirdstkaveh'] === "yes",
            "freeMode" => $settings['freemodeproductscarouselthirdstkaveh'] === "yes",
            "navigation" => $settings['showarrowproductscarouselthirdstkaveh'] === "yes" ? [
              "prevEl" => ".swiper-button-prev",
              "nextEl" => ".swiper-button-next"
            ] : false,
            "pagination" => $settings['showdotsproductscarouselthirdstkaveh'] === "yes" ? [
              "el" => ".swiper-pagination",
              "clickable" => true
            ] : false,
            "breakpoints" => [
              320 => ["slidesPerView" => intval($settings['productcolumn3productscarouselthirdstkaveh']), "spaceBetween" => 4],
              576 => ["slidesPerView" => intval($settings['productcolumn3productscarouselthirdstkaveh']), "spaceBetween" => 8],
              768 => ["slidesPerView" => intval($settings['productcolumn2productscarouselthirdstkaveh']), "spaceBetween" => 8],
              992 => ["slidesPerView" => intval($settings['productcolumnproductscarouselthirdstkaveh']), "spaceBetween" => 11],
            ]
          ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); ?>'>
          <div class="swiper-wrapper">
            <?php if('cat'===$settings['pproductscarouselthirdstkaveh']){ ?>
                <?php
                // Define your custom query arguments
                $query_args = array(
                  'post_type' => array('product'),
'post_status' => array('publish'),
                  'posts_per_page' => $settings['productnumberproductscarouselthirdstkaveh'],
                  'orderby' => $settings['psortproductscarouselthirdstkaveh'] === 'date' ? 'date' : 'meta_value_num', // Default to date or meta value
                  'order' => $settings['psortiproductscarouselthirdstkaveh'],
                  'tax_query' => array(
                    'relation' => 'AND',
                    array(
                      'taxonomy' => 'product_cat',
                      'field' => 'term_id',
                      'terms' => $settings['catproductscarouselthirdstkaveh'],
                    ),
                  ),
                );
                // Handle specific orderby values
                switch ($settings['psortproductscarouselthirdstkaveh']) {
                  case '_price':
                    $query_args['meta_key'] = '_price';
                    $query_args['orderby'] = 'meta_value_num';
                    break;

                  case '_wc_average_rating':
                    $query_args['meta_key'] = '_wc_average_rating';
                    $query_args['orderby'] = 'meta_value_num';
                    break;

                  case 'total_sales':
                    $query_args['meta_key'] = 'total_sales';
                    $query_args['orderby'] = 'meta_value_num';
                    break;
                }

                if ("yes" === $settings['kaveh_exclude_out_of_stock']) {
                  $query_args['tax_query'][] = array(
                    'taxonomy' => 'product_visibility',
                    'field' => 'name',
                    'terms' => array('outofstock'),
                    'operator' => 'NOT IN'
                  );
                }
                // Get the cached query results
                $cached_query = KavehCustomQuery::get_cached_query($query_args);
                if ($cached_query->have_posts()):
                  while ($cached_query->have_posts()):
                    $cached_query->the_post();
                    ?>
                    <div class="swiper-slide h-auto">
                      <?php $styleproduct2 = $settings['stylecartproductscarouselthirdstkaveh']; ?>
                      <?php get_template_part("template-part/product-cart-$styleproduct2"); ?>
                    </div>
                    <?php
                  endwhile;
                  wp_reset_postdata();
                else:
                  echo 'No posts found.';
                endif;
                ?>
   
              <?php }elseif('all'===$settings['pproductscarouselthirdstkaveh']){
                
              // Define your custom query arguments
              $query_args = array(
                'post_type' => array('product'),
'post_status' => array('publish'),
                'posts_per_page' => $settings['productnumberproductscarouselthirdstkaveh'],
                'orderby' => $settings['psortproductscarouselthirdstkaveh'] === 'date' ? 'date' : 'meta_value_num', // Default to date or meta value
                'order' => $settings['psortiproductscarouselthirdstkaveh'],
                'tax_query' => array(
                  'relation' => 'AND',
                ),
              );
              // Handle specific orderby values
              switch ($settings['psortproductscarouselthirdstkaveh']) {
                case '_price':
                  $query_args['meta_key'] = '_price';
                  $query_args['orderby'] = 'meta_value_num';
                  break;

                case '_wc_average_rating':
                  $query_args['meta_key'] = '_wc_average_rating';
                  $query_args['orderby'] = 'meta_value_num';
                  break;

                case 'total_sales':
                  $query_args['meta_key'] = 'total_sales';
                  $query_args['orderby'] = 'meta_value_num';
                  break;
              }

              if ("yes" === $settings['kaveh_exclude_out_of_stock']) {
                $query_args['tax_query'][] = array(
                  'taxonomy' => 'product_visibility',
                  'field' => 'name',
                  'terms' => array('outofstock'),
                  'operator' => 'NOT IN'
                );
              }
              // Get the cached query results
              $cached_query = KavehCustomQuery::get_cached_query($query_args);
              if ($cached_query->have_posts()):
                while ($cached_query->have_posts()):
                  $cached_query->the_post();
                  ?>
                  <div class="swiper-slide h-auto">
                    <?php $styleproduct2 = $settings['stylecartproductscarouselthirdstkaveh']; ?>
                    <?php get_template_part("template-part/product-cart-$styleproduct2"); ?>
                  </div>
                  <?php
                endwhile;
                wp_reset_postdata();
              else:
                echo 'No posts found.';
              endif;
              ?>

                <?php } ?>
            </div>
            <?php if($settings['showarrowproductscarouselthirdstkaveh'] === 'yes'){ ?>
              <div class="swiper-button-prev"></div>
              <div class="swiper-button-next"></div>
            <?php } ?>
            <?php if($settings['showdotsproductscarouselthirdstkaveh'] === 'yes'){ ?>
              <div class="swiper-pagination"></div>
            <?php } ?>
          </div>
          </div>
        </div>
    
    </section>
    
    <?php
  }


}
