<?php
/**
 * Watson WooCommerce Customizer Settings
 *
 * @package Watson
 * @version 1.0.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Добавляет настройки Watson WooCommerce в кастомайзер WordPress
 *
 * @param WP_Customize_Manager $wp_customize Объект кастомайзера.
 */
function watson_woo_customize_register( $wp_customize ) {
	// Добавляем настройку для количества колонок в каталоге продуктов
	$wp_customize->add_setting(
		'watson_woo_catalog_columns',
		array(
			'default'           => '3',
			'sanitize_callback' => 'sanitize_text_field', // Используем sanitize_text_field вместо absint
			'capability'        => 'edit_theme_options',
			'type'              => 'theme_mod',
			'transport'         => 'refresh',
		)
	);

	// Добавляем контрол для выбора количества колонок
	$wp_customize->add_control(
		'watson_woo_catalog_columns',
		array(
			'label'       => esc_html__( 'Product Catalog Columns', 'watson' ),
			'description' => esc_html__( 'Choose how many product columns to display in the catalog.', 'watson' ),
			'section'     => 'woocommerce_product_catalog',
			'settings'    => 'watson_woo_catalog_columns',
			'type'        => 'select',
			'choices'     => array(
				'2' => '2',
				'3' => '3',
				'4' => '4',
			),
			'priority'    => 20,
		)
	);
	
	// Добавляем настройку для текста кнопки "Add to cart"
	$wp_customize->add_setting(
		'watson_woo_add_to_cart_text',
		array(
			'default'           => esc_html__('Add to cart', 'watson'),
			'sanitize_callback' => 'sanitize_text_field',
			'capability'        => 'edit_theme_options',
			'type'              => 'theme_mod',
			'transport'         => 'refresh',
		)
	);

	// Добавляем контрол для изменения текста кнопки
	$wp_customize->add_control(
		'watson_woo_add_to_cart_text',
		array(
			'label'       => esc_html__( 'Add to Cart Button Text', 'watson' ),
			'description' => esc_html__( 'Change the text displayed on the Add to Cart button.', 'watson' ),
			'section'     => 'woocommerce_product_catalog',
			'settings'    => 'watson_woo_add_to_cart_text',
			'type'        => 'text',
			'priority'    => 30,
		)
	);
}
add_action( 'customize_register', 'watson_woo_customize_register' );

/**
 * Фильтрует количество колонок в каталоге продуктов WooCommerce
 * на основе настройки кастомайзера
 *
 * @param int $columns Количество колонок по умолчанию.
 * @return int Новое количество колонок.
 */
function watson_woo_loop_columns( $columns ) {
	// Получаем значение из настроек кастомайзера (строка)
	$columns_setting = get_theme_mod( 'watson_woo_catalog_columns', '3' );
	
	// Преобразуем в целое число без вывода в alert
	$columns = intval($columns_setting);
	
	// Проверяем, что значение в допустимом диапазоне
	if ($columns < 2 || $columns > 6) {
		$columns = 3; // Значение по умолчанию, если значение недопустимо
	}
	
	return $columns;
}
add_filter( 'loop_shop_columns', 'watson_woo_loop_columns' );

/**
 * Устанавливает количество колонок для связанных продуктов
 *
 * @param array $args Аргументы для связанных продуктов.
 * @return array Измененные аргументы.
 */
function watson_woo_related_products_args( $args ) {
	// Получаем значение из настроек кастомайзера (строка)
	$columns_setting = get_theme_mod( 'watson_woo_catalog_columns', '3' );
	
	// Преобразуем в целое число без вывода в alert
	$columns = intval($columns_setting);
	
	// Проверяем, что значение в допустимом диапазоне
	if ($columns < 2 || $columns > 6) {
		$columns = 3; // Значение по умолчанию, если значение недопустимо
	}
	
	$args['columns'] = $columns;
	return $args;
}
add_filter( 'woocommerce_output_related_products_args', 'watson_woo_related_products_args' );

/**
 * Устанавливает количество колонок для апселл-продуктов
 *
 * @param array $args Аргументы для апселл-продуктов.
 * @return array Измененные аргументы.
 */
function watson_woo_upsell_products_args( $args ) {
	// Получаем значение из настроек кастомайзера (строка)
	$columns_setting = get_theme_mod( 'watson_woo_catalog_columns', '3' );
	
	// Преобразуем в целое число без вывода в alert
	$columns = intval($columns_setting);
	
	// Проверяем, что значение в допустимом диапазоне
	if ($columns < 2 || $columns > 6) {
		$columns = 3; // Значение по умолчанию, если значение недопустимо
	}
	
	$args['columns'] = $columns;
	return $args;
}
add_filter( 'woocommerce_upsell_display_args', 'watson_woo_upsell_products_args' );

/**
 * Возвращает текст кнопки "Add to cart" из настроек кастомайзера
 *
 * @return string Текст кнопки "Add to cart"
 */
function watson_woo_get_add_to_cart_text() {
    return get_theme_mod('watson_woo_add_to_cart_text', esc_html__('Add to cart', 'watson'));
}

/**
 * Изменяет текст кнопки "Add to cart" для простых продуктов
 *
 * @param string $text Текст кнопки по умолчанию
 * @return string Новый текст кнопки
 */
function watson_woo_simple_add_to_cart_text($text) {
    return watson_woo_get_add_to_cart_text();
}
add_filter('woocommerce_product_single_add_to_cart_text', 'watson_woo_simple_add_to_cart_text');
add_filter('woocommerce_product_add_to_cart_text', 'watson_woo_simple_add_to_cart_text');

/**
 * Изменяет текст кнопки "Add to cart" для вариативных продуктов
 *
 * @param string $text Текст кнопки по умолчанию
 * @return string Новый текст кнопки
 */
function watson_woo_variable_add_to_cart_text($text) {
    return watson_woo_get_add_to_cart_text();
}
add_filter('woocommerce_product_variable_add_to_cart_text', 'watson_woo_variable_add_to_cart_text');

/**
 * Изменяет текст кнопки "Add to cart" для групповых продуктов
 *
 * @param string $text Текст кнопки по умолчанию
 * @return string Новый текст кнопки
 */
function watson_woo_grouped_add_to_cart_text($text) {
    return watson_woo_get_add_to_cart_text();
}
add_filter('woocommerce_product_grouped_add_to_cart_text', 'watson_woo_grouped_add_to_cart_text');

/**
 * Изменяет текст кнопки "Add to cart" для внешних продуктов
 *
 * @param string $text Текст кнопки по умолчанию
 * @return string Новый текст кнопки
 */
function watson_woo_external_add_to_cart_text($text) {
    return watson_woo_get_add_to_cart_text();
}
add_filter('woocommerce_product_external_add_to_cart_text', 'watson_woo_external_add_to_cart_text');

/**
 * Устанавливает свойство колонок непосредственно перед отображением продуктов
 */
function watson_woo_set_columns_before_loop() {
    // Получаем количество колонок из настроек кастомайзера
    $columns = get_theme_mod('watson_woo_catalog_columns', 3);
    
    // Устанавливаем свойство цикла непосредственно
    if (function_exists('wc_set_loop_prop')) {
        wc_set_loop_prop('columns', absint($columns));
    }
}

// Добавляем хуки для установки свойства перед различными циклами продуктов
add_action('woocommerce_before_shop_loop', 'watson_woo_set_columns_before_loop', 5);
add_action('woocommerce_before_single_product_summary', 'watson_woo_set_columns_before_loop', 5);
add_action('woocommerce_before_cart', 'watson_woo_set_columns_before_loop', 5);
add_action('woocommerce_before_checkout_form', 'watson_woo_set_columns_before_loop', 5);
