// FORMULARIOS DE PRODUCTO

// Mostrar el checkbox en productos simples y variables
add_action('woocommerce_product_options_general_product_data', 'agregar_checkbox_profesional_general');
add_action('woocommerce_variation_options_pricing', 'agregar_checkbox_variantes_profesional', 10, 3);

function agregar_checkbox_profesional_general() {
    global $post;
    
    // Mostrar checkbox en productos simples
    woocommerce_wp_checkbox(
        array(
            'id' => '_solo_para_profesionales', 
            'label' => __('Solo para usuarios profesionales', 'woocommerce'),
            'description' => __('Marque esta opción si el producto solo puede ser comprado por usuarios profesionales.', 'woocommerce'),
            'desc_tip' => true,
            'value' => get_post_meta($post->ID, '_solo_para_profesionales', true) === 'yes' ? 'yes' : 'no',
        )
    );
}

// Mostrar checkbox en cada variante de producto
function agregar_checkbox_variantes_profesional($loop, $variation_data, $variation) {
    woocommerce_wp_checkbox(
        array(
            'id' => '_solo_para_profesionales_variation_' . $variation->ID, 
            'label' => __('Solo para usuarios profesionales', 'woocommerce'),
            'description' => __('Marque esta opción si la variante solo puede ser comprada por usuarios profesionales.', 'woocommerce'),
            'desc_tip' => true,
            'value' => get_post_meta($variation->ID, '_solo_para_profesionales', true) === 'yes' ? 'yes' : 'no',
        )
    );
}

// Guardar el valor del checkbox para el producto y para las variantes
add_action('woocommerce_process_product_meta', 'guardar_checkbox_producto_profesional');
add_action('woocommerce_save_product_variation', 'guardar_checkbox_variantes_profesional', 10, 2);

function guardar_checkbox_producto_profesional($post_id) {
    $solo_para_profesionales = isset($_POST['_solo_para_profesionales']) ? 'yes' : 'no';
    update_post_meta($post_id, '_solo_para_profesionales', $solo_para_profesionales);
}

function guardar_checkbox_variantes_profesional($variation_id, $i) {
    $solo_para_profesionales = isset($_POST['_solo_para_profesionales_variation_' . $variation_id]) ? 'yes' : 'no';
    update_post_meta($variation_id, '_solo_para_profesionales', $solo_para_profesionales);
}

add_filter('woocommerce_dropdown_variation_attribute_options_args', 'custom_variations_if_professional', 10, 2);
function custom_variations_if_professional($args, $attribute=null) 
{
    global $product;

    if (!$product || !$product->is_type('variable')) {
        return $args; // Si no es un producto variable, no hacemos nada
    }

    // Obtener todas las variaciones del producto
    $variations = $product->get_available_variations();

    // Lista de opciones a deshabilitar
    $disabled_options = [];

    foreach ($variations as $variation) 
	{
        $variation_id = $variation['variation_id'];

        // Verificar si tiene el meta _solo_para_profesionales en "yes"
        
		$disable = false;
		
		// Verificar si el producto es solo para profesionales
		$solo_para_profesionales = get_post_meta($variation_id, '_solo_para_profesionales', true);		
		
		if (is_user_logged_in()) 
		{
			$user = wp_get_current_user();

			// Verificar si el usuario no tiene el rol de "Profesional"
			if (!in_array('profesional', $user->roles)) 
			{
				if ($solo_para_profesionales === 'yes') 
				{
					$disable = true;
				}
			}
		}
		else if ($solo_para_profesionales === 'yes') $disable = true;
		
		if($disable)
		{
			foreach ($variation['attributes'] as $key => $value) {
				$disabled_options[] = $value;
			}			
		}
		
    }

    // Agregar la clave "disabled" a las opciones restringidas
    if (!empty($args['options'])) 
	{
        foreach ($args['options'] as $key => $value) 
		{
            if (in_array($value, $disabled_options)) 
			{
                // $args['options'][$key] = '<option value="' . esc_attr($value) . '" disabled>' . esc_html($value) . '</option>';
                unset($args['options'][$key]);
            }
        }
    }

    return $args;
}







// FICHA DEL PRODUCTO

function mostrar_mensaje_solo_profesionales() {
    global $product;

    // Asegurar que estamos en una ficha de producto y que el objeto $product está disponible
    if (!is_product() || !$product) {
        return;
    }
	
	$disable = false;
	
	// Verificar si el producto es solo para profesionales
	$solo_para_profesionales = get_post_meta($product->get_id(), '_solo_para_profesionales', true);	
	
	if (is_user_logged_in()) 
	{
		$user = wp_get_current_user();

		// Verificar si el usuario no tiene el rol de "Profesional"
		if (!in_array('profesional', $user->roles)) 
		{

			if ($solo_para_profesionales === 'yes') 
			{
				$disable = true;
			}
			
		}
	}
	else if ($solo_para_profesionales === 'yes') $disable = true;

    if ($disable) 
	{
        echo '<p style="color: 999; font-weight: bold; margin-bottom: 10px; font-size: 14px;">⚠️ Producto exclusivo para profesionales.</p>';
    }
}
// Hook para insertar el mensaje encima del botón de compra
add_action('woocommerce_before_add_to_cart_form', 'mostrar_mensaje_solo_profesionales');












// CESTA DE LA COMPRA

// Validar si el producto o variante es solo para profesionales en el carrito
/*
add_action('woocommerce_check_cart_items', 'validar_producto_variantes_profesionales');
function validar_producto_variantes_profesionales() {
    // Verificar si el usuario está logueado
    if (is_user_logged_in()) {
        $user = wp_get_current_user();

        // Verificar si el usuario tiene el rol de "Profesional"
        if (!in_array('Profesional', $user->roles)) {
            // Verificar si el carrito tiene productos o variantes solo para profesionales
            foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
                $product_id = $cart_item['product_id'];

                // Para productos variables, verificamos las variantes
                if (isset($cart_item['variation_id']) && $cart_item['variation_id'] > 0) {
                    $variation_id = $cart_item['variation_id'];
                    $solo_para_profesionales = get_post_meta($variation_id, '_solo_para_profesionales', true);
                } else {
                    $solo_para_profesionales = get_post_meta($product_id, '_solo_para_profesionales', true);
                }

                if ($solo_para_profesionales === 'yes') {
                    wc_add_notice(__('Este producto solo está disponible para usuarios profesionales.', 'woocommerce'), 'error');
                }
            }
        }
    } else {
        // Si no está logueado, mostrar el aviso para productos o variantes exclusivas
        foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
            $product_id = $cart_item['product_id'];

            // Para productos variables, verificamos las variantes
            if (isset($cart_item['variation_id']) && $cart_item['variation_id'] > 0) {
                $variation_id = $cart_item['variation_id'];
                $solo_para_profesionales = get_post_meta($variation_id, '_solo_para_profesionales', true);
            } else {
                $solo_para_profesionales = get_post_meta($product_id, '_solo_para_profesionales', true);
            }

            if ($solo_para_profesionales === 'yes') {
                wc_add_notice(__('Este producto solo está disponible para usuarios profesionales. Debes iniciar sesión para poder comprarlo.', 'woocommerce'), 'error');
            }
        }
    }
}
*/

// FICHA DE PRODUCTO

// Desactivar el botón de añadir al carrito si el producto es solo para profesionales
function desactivar_boton_anadir_carrito() {
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function($){
            // Desactivar el botón de añadir al carrito
            $('.single_add_to_cart_button').prop('disabled', true);

            // Mostrar el aviso en la ficha de producto
            if ($('.aviso-profesional').length > 0) {
                $('.single_add_to_cart_button').addClass('disabled');
            }
        });
    </script>
    <?php
}

// Mostrar el aviso para productos variables (en función de la variante seleccionada)
add_action('woocommerce_before_single_product', 'mostrar_aviso_variantes_profesionales', 10);
function mostrar_aviso_variantes_profesionales() 
{
    global $product, $post;

    // Si el producto es variable, comprobamos las variantes
    if ($product->is_type('variable')) 
	{
		/*
        // Añadimos el aviso solo si alguna variante es para profesionales
        $variations = $product->get_available_variations();
        foreach ($variations as $variation) {
            $solo_para_profesionales = get_post_meta($variation['variation_id'], '_solo_para_profesionales', true);
            if ($solo_para_profesionales === 'yes') {
                echo '<div class="woocommerce-info aviso-profesional">Este producto solo está disponible para usuarios profesionales. Debes iniciar sesión con una cuenta profesional para poder comprarlo.</div>';
                
                // Desactivar el botón de añadir al carrito
                add_action('wp_footer', 'desactivar_boton_anadir_carrito');
                break;
            }
        }
		*/
    }
	else if ($product->is_type('simple'))
	{
		// Verificar si el usuario está logueado
		if (is_user_logged_in()) 
		{
			$user = wp_get_current_user();

			// Verificar si el usuario no tiene el rol de "Profesional"
			if (!in_array('profesional', $user->roles)) 
			{
				// Verificar si el producto es solo para profesionales
				$solo_para_profesionales = get_post_meta($post->ID, '_solo_para_profesionales', true);

				if ($solo_para_profesionales === 'yes') 
				{
					echo '<div class="woocommerce-info aviso-profesional">Este producto solo está disponible para usuarios profesionales. Debes iniciar sesión con una cuenta profesional para poder comprarlo.</div>';

					// Desactivar el botón de añadir al carrito
					add_action('wp_footer', 'desactivar_boton_anadir_carrito');
				}
			}
		} 
		else 
		{
			// Si el usuario no está logueado, mostrar el aviso
			$solo_para_profesionales = get_post_meta($post->ID, '_solo_para_profesionales', true);

			if ($solo_para_profesionales === 'yes') {
				echo '<div class="woocommerce-info aviso-profesional">Este producto solo está disponible para usuarios profesionales. Debes iniciar sesión con una cuenta profesional para poder comprarlo.</div>';

				// Desactivar el botón de añadir al carrito
				add_action('wp_footer', 'desactivar_boton_anadir_carrito');
			}
		}		
	}
}