<?php
/**
 * Manejo del estado del servicio y configuración del plugin Compibot.
 *
 * Este archivo contiene funciones para verificar el estado del servicio en la API de Compibot,
 * comprobar la versión del plugin, y gestionar configuraciones avanzadas.
 *
 * @package Compibot
 */

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

/**
 * Verifica el estado del servicio en la API de Compibot y actualiza la base de datos.
 *
 * @param string $token Token de autenticación del usuario.
 * @return string Estado del servicio ('active' o 'inactive').
 */
function compibot_check_service_status( $token ) {
	$db_manager = new CompibotDatabaseManager();
	global $wpdb;
	$table_name = $wpdb->prefix . 'compibot';

	$api_url  = 'https://panel.compibot.com/api/check-service/';
	$cms_name = 'WordPress';

	$response = wp_remote_post(
		$api_url,
		array(
			'body'    => wp_json_encode( array( 'token' => $token ) ),
			'headers' => array( 'Content-Type' => 'application/json' ),
		)
	);

	if ( is_wp_error( $response ) ) {
		return 'inactive'; // Si hay algún error en la llamada lo tratamos como inactivo.
	}

	$body = wp_remote_retrieve_body( $response );
	$data = json_decode( $body, true );

	if ( isset( $data['service']['active'] ) ) {
		// Actualizamos el campo "active" en la base de datos de WordPress.
		$is_active = (int) $data['service']['active']; // Lo convertimos si o si en entero.

		// Actualizamos la base de datos con el valor de "active".
		$db_manager->compibot_update(
			array( 'active' => $is_active ),
			array( 'id' => 1 )
		);

		// Si el servicio se encuentra activo en ese caso es cuando solo sacamos la versión del plugin.
		if ( 1 === $is_active ) {
			check_plugin_version( $cms_name );

			$addons = array();

			// Verificamos si hay addons disponibles en la respuesta.
			if ( isset( $data['service']['addons'] ) && ! empty( $data['service']['addons'] ) ) {
				// Addons es una lista de módulos.
				$addons = $data['service']['addons'];
			}
			// Guardamos los addons en la base de datos en formato JSON.
			$db_manager->compibot_update(
				array( 'modulos' => wp_json_encode( $addons ) ),
				array( 'id' => 1 )
			);
		}

		return 1 === $is_active ? 'active' : 'inactive';
	}

	return 'inactive';
}

// Hook para realizar la comprobación de la versión del plugin en el área de administración.
add_action( 'admin_init', 'compibot_check_plugin_version_conditionally' );

/**
 * Verifica la versión del plugin si estamos en la página de configuración de Compibot.
 *
 * @return void
 */
function compibot_check_plugin_version_conditionally() {
	// Verifica que estamos en la página de administración de compibot.
	// wp_unslash y sanitize_text_field son funciones de seguridad para evitar ataques XSS.

    // phpcs:ignore WordPress.Security.NonceVerification.Recommended
	$page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';

	if ( 'compibot' === $page ) {
		compibot_compibot_check_plugin_version();
	}
}

/**
 * Verifica si hay una nueva versión disponible del plugin Compibot.
 *
 * Si hay una nueva versión, muestra un aviso en el panel de administración de WordPress.
 *
 * @return void
 */
function compibot_compibot_check_plugin_version() {
	$db_manager = new CompibotDatabaseManager();

	global $wpdb;
	$table_name = $wpdb->prefix . 'compibot';

	// Comprobar si el usuario actual tiene permisos de administrador.
	if ( ! current_user_can( 'manage_options' ) ) {
		return;
	}

	$token = $db_manager->compibot_select( 'token', 'plugin_token_compibot_page', 60 );

	if ( '0' === $token ) {
		return; // Si no hay token, no hacemos nada.
	}

	// Definir el nombre del CMS, por ejemplo, 'WordPress'.
	$cms_name = 'WordPress';

	// Obtenemos la versión actual del plugin.
	$version         = CompibotPlugin::VERSION; // Versión del plugin.
	$current_version = $version;

	// URL del endpoint de Django para obtener la última versión del plugin.
	$version_check_url = 'https://panel.compibot.com/api/get-latest-plugin-version/';

	// Hacemos la solicitud POST para obtener la versión más reciente.
	$response = wp_remote_post(
		$version_check_url,
		array(
			'body'    => wp_json_encode(
				array(
					'cms'             => $cms_name,
					'current_version' => $current_version, // Enviamos la versión actual.
				)
			),
			'headers' => array(
				'Content-Type'  => 'application/json',
				'Authorization' => 'Bearer ' . $token,
			),
		)
	);

	// Verificamos si hay un error en la solicitud.
	if ( is_wp_error( $response ) ) {
		return; // Si hay un error, salimos de la función.
	}

	$body = wp_remote_retrieve_body( $response );
	$data = json_decode( $body, true );

	if ( isset( $data['version'] ) ) {
		$latest_version = $data['version'];

		// Comprobar si la versión actual es diferente de la última versión.
		if ( $current_version !== $latest_version ) {
			// Mostrar un mensaje de aviso en el panel de administración.
			add_action(
				'admin_notices',
				function () use ( $latest_version, $token ) {
					$domain = isset( $_SERVER['SERVER_NAME'] ) ? sanitize_text_field( wp_unslash( $_SERVER['SERVER_NAME'] ) ) : '';

					// Cambio solicitado por el phpcs.
					// urlencode() should only be used when dealing with legacy applications rawurlencode() should now be used instead.
					$encoded_token = rawurlencode( $token );
					$download_url  = "https://panel.compibot.com/validate-download/?token={$encoded_token}&domain={$domain}";
					echo '<div class="notice notice-warning is-dismissible">';
					echo '<p><strong>' . esc_html( '¡Nueva versión disponible!' ) . '</strong> ' .
					esc_html__( 'Hay una nueva versión de Compibot disponible', 'compibot' ) . ' (' .
					esc_html( $latest_version ) . '). <a href="' . esc_url( $download_url ) . '" target="_blank">' .
					esc_html( 'Haz clic aquí para descargarla' ) . '</a>.</p>';
					echo '</div>';
				}
			);
		} else {
			// Mostrar un mensaje indicando que el plugin está actualizado.
			add_action(
				'admin_notices',
				function () {
					echo '<div class="notice notice-success is-dismissible">';
					echo '<p>El plugin Compibot está actualizado a la última versión.</p>';
					echo '</div>';
				}
			);
		}
	}
}

/**
 * Guarda la configuración del plugin Compibot en la base de datos y la API.
 *
 * Esta función valida y sanitiza los datos del formulario enviados por el usuario,
 * luego los almacena en la base de datos y los envía a la API de Compibot.
 *
 * @return void
 */
function compibot_save_settings() {

	$db_manager = new CompibotDatabaseManager();

	global $wp_filesystem;
	if ( ! is_object( $wp_filesystem ) ) {
		require_once ABSPATH . 'wp-admin/includes/file.php';
		WP_Filesystem();
	}

	global $wpdb;
	$table_name = $wpdb->prefix . 'compibot';

	// Validar el nonce para proteger contra CSRF.
	if ( ! isset( $_POST['compibot_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['compibot_nonce'] ) ), 'compibot_save_settings_action' ) ) {
		wp_die( 'Permiso denegado: solicitud no válida.' );
	}

	$token = $db_manager->compibot_select( 'token', 'plugin_token_compibot_page', 60 );
	
	$settings_scope = isset( $_POST['compibot_settings_scope'] ) ? sanitize_text_field( wp_unslash( $_POST['compibot_settings_scope'] ) ) : 'general';

	// Verificamos y "sanitizamos" los valores recibidos del formulario.
	$compibot_status = isset( $_POST['compibot_status'] ) ? intval( $_POST['compibot_status'] ) : 0;

	$chat_location = isset( $_POST['compibot-location'] ) ? sanitize_text_field( wp_unslash( $_POST['compibot-location'] ) ) : 'right';

	$notify_on_conversation_end = isset( $_POST['notify_on_conversation_end'] ) ? 1 : 0;

	$notify_on_conversation_start = isset( $_POST['notify_on_conversation_start'] ) ? 1 : 0;

	$compibot_site_name = isset( $_POST['compibot_site_name'] ) ? sanitize_text_field( wp_unslash( $_POST['compibot_site_name'] ) ) : 'compibot';

	$compibot_bot_name = isset( $_POST['compibot_bot_name'] ) ? sanitize_text_field( wp_unslash( $_POST['compibot_bot_name'] ) ) : 'compibot';
	$has_icon_style = isset( $_POST['compibot_icon_style'] );
	$compibot_icon_style = $has_icon_style ? sanitize_text_field( wp_unslash( $_POST['compibot_icon_style'] ) ) : 'default';

	$compibot_theme_mode = isset( $_POST['compibot_theme_mode'] ) ? sanitize_text_field( wp_unslash( $_POST['compibot_theme_mode'] ) ) : '';
	if ( in_array( $compibot_theme_mode, array( 'light', 'dark', 'custom' ), true ) ) {
		$compibot_color = 'custom' === $compibot_theme_mode ? '' : $compibot_theme_mode;
	} else {
		$compibot_color = '';
	}

	$compibot_mensaje_bienvenida = isset( $_POST['compibot_bot_bienvenida'] ) ? sanitize_text_field( wp_unslash( $_POST['compibot_bot_bienvenida'] ) ) : '';

	$custom_rgb_title          = isset( $_POST['custom_rgb_title'] ) ? sanitize_text_field( wp_unslash( $_POST['custom_rgb_title'] ) ) : '';
	$custom_rgb_text           = isset( $_POST['custom_rgb_text'] ) ? sanitize_text_field( wp_unslash( $_POST['custom_rgb_text'] ) ) : '';
	$custom_rgb_bubble_me_text = isset( $_POST['custom_rgb_bubble_me_text'] ) ? sanitize_text_field( wp_unslash( $_POST['custom_rgb_bubble_me_text'] ) ) : '';
	$custom_rgb_background     = isset( $_POST['custom_rgb_background'] ) ? sanitize_text_field( wp_unslash( $_POST['custom_rgb_background'] ) ) : '';
	$custom_rgb_bubble_contact = isset( $_POST['custom_rgb_bubble_contact'] ) ? sanitize_text_field( wp_unslash( $_POST['custom_rgb_bubble_contact'] ) ) : '';
	$custom_rgb_bubble_me      = isset( $_POST['custom_rgb_bubble_me'] ) ? sanitize_text_field( wp_unslash( $_POST['custom_rgb_bubble_me'] ) ) : '';
	$custom_rgb_send_button    = isset( $_POST['custom_rgb_send_button'] ) ? sanitize_text_field( wp_unslash( $_POST['custom_rgb_send_button'] ) ) : '';
	$custom_rgb_stop_button    = isset( $_POST['custom_rgb_stop_button'] ) ? sanitize_text_field( wp_unslash( $_POST['custom_rgb_stop_button'] ) ) : '';
	$custom_rgb_accent         = isset( $_POST['custom_rgb_accent'] ) ? sanitize_text_field( wp_unslash( $_POST['custom_rgb_accent'] ) ) : '';
	$use_custom_site_logo      = isset( $_POST['use_custom_site_logo'] ) ? 1 : 0;
	$custom_rgb_chat_icon_background = isset( $_POST['custom_rgb_chat_icon_background'] ) ? sanitize_text_field( wp_unslash( $_POST['custom_rgb_chat_icon_background'] ) ) : '';
	$use_custom_chat_icon      = isset( $_POST['use_custom_chat_icon'] ) ? 1 : 0;
	$use_custom_chat_icon_background = isset( $_POST['use_custom_chat_icon_background'] ) ? 1 : 0;
	$chat_icon_background_transparent = isset( $_POST['chat_icon_background_transparent'] ) ? 1 : 0;
	$reset_customization_defaults = ( isset( $_POST['reset_customization_defaults'] ) && '1' === sanitize_text_field( wp_unslash( $_POST['reset_customization_defaults'] ) ) ) ? 1 : 0;
	if ( 1 === $reset_customization_defaults && 'customization' === $settings_scope ) {
		$compibot_theme_mode            = 'light';
		$compibot_color                 = 'light';
		$custom_rgb_chat_icon_background = '';
		$use_custom_chat_icon           = 0;
		$use_custom_chat_icon_background = 0;
		$chat_icon_background_transparent = 0;
	}

	// Código para subir la imagen del icono y convertirla en Base64.
	$compibot_icon_base64 = '';
	$upload_field_name    = 'customization' === $settings_scope ? 'compibot_branding_icon' : 'compibot_icon';

	if ( ! empty( $_FILES[ $upload_field_name ]['tmp_name'] ) ) {
		$uploaded_file          = array_map( 'sanitize_text_field', wp_unslash( $_FILES[ $upload_field_name ] ) );
		$uploaded_file['name']  = sanitize_file_name( $uploaded_file['name'] ); // El nombre del archivo requiere sanitización especial.
		$uploaded_file['type']  = sanitize_mime_type( $uploaded_file['type'] ); // Sanitiza el tipo MIME.
		$uploaded_file['error'] = intval( $uploaded_file['error'] ); // Convierte en entero.
		$uploaded_file['size']  = intval( $uploaded_file['size'] ); // Convierte en entero.
		$file_type              = mime_content_type( $uploaded_file['tmp_name'] );

		$allowed_types = array( 'image/png', 'image/jpeg', 'image/jpg', 'image/webp' );
		if ( ! in_array( $file_type, $allowed_types, true ) ) {
			wp_die( 'Error: el archivo no es una imagen válida.' );
		}

		// Obtenemos el contenido de la imagen.
		$image_data = $wp_filesystem->get_contents( $uploaded_file['tmp_name'] );

		// Se usa base64_encode() de manera legítima para convertir la imagen en un formato base64.
		// que se utilizará en la interfaz sin almacenar archivos en el servidor.
		// No se emplea para ofuscar código ni con fines maliciosos.
		// Se desactiva la advertencia de PHPCS ya que su uso es seguro y justificado.
		// phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
		$compibot_icon_base64 = 'data:' . $file_type . ';base64,' . base64_encode( $image_data );

	}

	// Realizamos la llamada a la API para enviar las configuraciones.
	if ( 'customization' === $settings_scope ) {
		// Update parcial para el modulo de rebranding/colores.
		$request_body = array(
			'chat_location' => $chat_location,
		);
		if ( 1 === $reset_customization_defaults ) {
			$request_body['reset_customization_defaults'] = true;
			$request_body['theme_mode']                   = 'light';
			$request_body['color']                        = 'light';
		}
		if ( '' !== $compibot_color ) {
			$request_body['color'] = $compibot_color;
		}
		if ( $has_icon_style ) {
			$request_body['icon_style'] = $compibot_icon_style;
		}
		$request_body['use_custom_chat_icon'] = $use_custom_chat_icon;
		$request_body['use_custom_chat_icon_background'] = $use_custom_chat_icon_background;
		if ( in_array( $compibot_theme_mode, array( 'light', 'dark', 'custom' ), true ) ) {
			$request_body['theme_mode'] = $compibot_theme_mode;
		}
		if ( 1 === $use_custom_chat_icon_background ) {
			if ( 1 === $chat_icon_background_transparent ) {
				$request_body['custom_rgb_chat_icon_background'] = 'transparent';
			} elseif ( ! empty( $custom_rgb_chat_icon_background ) && preg_match( '/^#[0-9A-Fa-f]{6}$/', $custom_rgb_chat_icon_background ) ) {
				$request_body['custom_rgb_chat_icon_background'] = $custom_rgb_chat_icon_background;
			}
		}
		if ( ! empty( $compibot_icon_base64 ) ) {
			$request_body['chat_icon'] = $compibot_icon_base64;
		}
	} else {
		$request_body = array(
			'compibot_status'              => $compibot_status,
			'chat_location'                => $chat_location,
			'notify_on_conversation_end'   => $notify_on_conversation_end,
			'notify_on_conversation_start' => $notify_on_conversation_start,
			'site_name'                    => $compibot_site_name,
			'bot_name'                     => $compibot_bot_name,
			'icon_style'                   => $compibot_icon_style,
			'use_custom_site_logo'         => $use_custom_site_logo,
			'site_logo'                    => $compibot_icon_base64,
			'mensaje_bienvenida'           => $compibot_mensaje_bienvenida,
		);
		if ( '' !== $compibot_color ) {
			$request_body['color'] = $compibot_color;
		}
	}

	$is_custom_theme_mode = 'custom' === $compibot_theme_mode;
	if ( $is_custom_theme_mode ) {
		if ( ! empty( $custom_rgb_title ) && preg_match( '/^#[0-9A-Fa-f]{6}$/', $custom_rgb_title ) ) {
			$request_body['custom_rgb_title'] = $custom_rgb_title;
		}
		if ( ! empty( $custom_rgb_text ) && preg_match( '/^#[0-9A-Fa-f]{6}$/', $custom_rgb_text ) ) {
			$request_body['custom_rgb_text'] = $custom_rgb_text;
		}
		if ( ! empty( $custom_rgb_bubble_me_text ) && preg_match( '/^#[0-9A-Fa-f]{6}$/', $custom_rgb_bubble_me_text ) ) {
			$request_body['custom_rgb_bubble_me_text'] = $custom_rgb_bubble_me_text;
		}
		if ( ! empty( $custom_rgb_background ) && preg_match( '/^#[0-9A-Fa-f]{6}$/', $custom_rgb_background ) ) {
			$request_body['custom_rgb_background'] = $custom_rgb_background;
		}
		if ( ! empty( $custom_rgb_bubble_contact ) && preg_match( '/^#[0-9A-Fa-f]{6}$/', $custom_rgb_bubble_contact ) ) {
			$request_body['custom_rgb_bubble_contact'] = $custom_rgb_bubble_contact;
		}
		if ( ! empty( $custom_rgb_bubble_me ) && preg_match( '/^#[0-9A-Fa-f]{6}$/', $custom_rgb_bubble_me ) ) {
			$request_body['custom_rgb_bubble_me'] = $custom_rgb_bubble_me;
		}
		if ( ! empty( $custom_rgb_send_button ) && preg_match( '/^#[0-9A-Fa-f]{6}$/', $custom_rgb_send_button ) ) {
			$request_body['custom_rgb_send_button'] = $custom_rgb_send_button;
		}
		if ( ! empty( $custom_rgb_stop_button ) && preg_match( '/^#[0-9A-Fa-f]{6}$/', $custom_rgb_stop_button ) ) {
			$request_body['custom_rgb_stop_button'] = $custom_rgb_stop_button;
		}
		if ( ! empty( $custom_rgb_accent ) && preg_match( '/^#[0-9A-Fa-f]{6}$/', $custom_rgb_accent ) ) {
			$request_body['custom_rgb_accent'] = $custom_rgb_accent;
		}
	}

	$response = wp_remote_post(
		'https://panel.compibot.com/api/set-cms-config/',
		array(
			'body'    => wp_json_encode( $request_body ),
			'headers' => array(
				'Content-Type'  => 'application/json',
				'Authorization' => 'Bearer ' . $token,
			),
		)
	);

	// Procesamos la respuesta de la API.
	if ( is_wp_error( $response ) ) {
		wp_die( 'Error en la solicitud a la API: ' . esc_html( $response->get_error_message() ) );
	} else {
		$nonce = wp_create_nonce( 'compibot_save_settings_action' );
		// Redirige de vuelta a la página de configuraciones con un mensaje de éxito.
		wp_safe_redirect( admin_url( 'admin.php?page=compibot&status=success&_wpnonce=' . $nonce ) );
		exit;
	}
}

/**
 * Guarda la configuración del prompt en la API de Compibot.
 *
 * Esta función valida y sanitiza los datos del formulario enviados por el usuario
 * para personalizar los prompts de interacción con el bot, luego los envía a la API de Compibot.
 *
 * @return void
 */
function compibot_save_prompt() {
	if ( ! isset( $_POST['compibot_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['compibot_nonce'] ) ), 'compibot_save_prompt_action' ) ) {
		wp_die( 'Permiso denegado: solicitud no válida.' );
	}

	$db_manager = new CompibotDatabaseManager();

	$token = $db_manager->compibot_select( 'token', 'plugin_token_compibot_page', 60 );

	// Verificamos y "sanitizamos" los valores recibidos del formulario.
	$pr_option1                    = isset( $_POST['pr_option1_mod1'] ) ? 1 : 0;
	$pr_option2                    = isset( $_POST['pr_option2_mod1'] ) ? 1 : 0;
	$pr_option3                    = isset( $_POST['pr_option3_mod1'] ) ? 1 : 0;
	$pr_custom_section             = isset( $_POST['pr_custom_section_mod1'] ) ? sanitize_text_field( wp_unslash( $_POST['pr_custom_section_mod1'] ) ) : '';
	$chat_quick_questions_enabled  = isset( $_POST['chat_quick_questions_enabled_mod1'] ) ? 1 : 0;
	$chat_quick_question1_enabled  = isset( $_POST['chat_quick_question1_enabled_mod1'] ) ? 1 : 0;
	$chat_quick_question2_enabled  = isset( $_POST['chat_quick_question2_enabled_mod1'] ) ? 1 : 0;
	$chat_quick_question3_enabled  = isset( $_POST['chat_quick_question3_enabled_mod1'] ) ? 1 : 0;
	$chat_quick_question1_text     = isset( $_POST['chat_quick_question1_text_mod1'] ) ? sanitize_text_field( wp_unslash( $_POST['chat_quick_question1_text_mod1'] ) ) : '';
	$chat_quick_question2_text     = isset( $_POST['chat_quick_question2_text_mod1'] ) ? sanitize_text_field( wp_unslash( $_POST['chat_quick_question2_text_mod1'] ) ) : '';
	$chat_quick_question3_text     = isset( $_POST['chat_quick_question3_text_mod1'] ) ? sanitize_text_field( wp_unslash( $_POST['chat_quick_question3_text_mod1'] ) ) : '';
	$chat_quick_questions_configured = ( 1 === $chat_quick_questions_enabled )
		|| ( 1 === $chat_quick_question1_enabled )
		|| ( 1 === $chat_quick_question2_enabled )
		|| ( 1 === $chat_quick_question3_enabled )
		|| '' !== trim( $chat_quick_question1_text )
		|| '' !== trim( $chat_quick_question2_text )
		|| '' !== trim( $chat_quick_question3_text );

	$request_body = array(
		'pr_option1'                      => $pr_option1,
		'pr_option2'                      => $pr_option2,
		'pr_option3'                      => $pr_option3,
		'pr_custom_section'               => $pr_custom_section,
		'chat_quick_questions_configured' => $chat_quick_questions_configured ? 1 : 0,
		'chat_quick_questions_enabled'    => $chat_quick_questions_enabled,
	);

	if ( 1 === $chat_quick_questions_enabled ) {
		$selected_questions = array(
			1 => $chat_quick_question1_enabled,
			2 => $chat_quick_question2_enabled,
			3 => $chat_quick_question3_enabled,
		);
		$question_labels    = array(
			1 => $chat_quick_question1_text,
			2 => $chat_quick_question2_text,
			3 => $chat_quick_question3_text,
		);

		if ( ! array_sum( $selected_questions ) ) {
			wp_die( 'Debes seleccionar al menos una pregunta visible para Compiload.' );
		}

		foreach ( $selected_questions as $question_number => $is_selected ) {
			if ( 1 === $is_selected && '' === trim( $question_labels[ $question_number ] ) ) {
				wp_die( 'Las preguntas marcadas para mostrarse no pueden estar vacias.' );
			}
		}

		$request_body['chat_quick_question1_enabled'] = $chat_quick_question1_enabled;
		$request_body['chat_quick_question2_enabled'] = $chat_quick_question2_enabled;
		$request_body['chat_quick_question3_enabled'] = $chat_quick_question3_enabled;
		$request_body['chat_quick_question1_text']    = $chat_quick_question1_text;
		$request_body['chat_quick_question2_text']    = $chat_quick_question2_text;
		$request_body['chat_quick_question3_text']    = $chat_quick_question3_text;
	}

	// Realizamos la llamada a la API para enviar las configuraciones.
	$response = wp_remote_post(
		'https://panel.compibot.com/api/set-pr-config/',
		array(
			'body'    => wp_json_encode( $request_body ),
			'headers' => array(
				'Content-Type'  => 'application/json',
				'Authorization' => 'Bearer ' . $token,
			),
		)
	);

	// Procesamos la respuesta de la API.
	if ( is_wp_error( $response ) ) {
		wp_die( 'Error en la solicitud a la API: ' . esc_html( $response->get_error_message() ) );
	} else {
		$nonce = wp_create_nonce( 'compibot_save_settings_action' );

		set_transient( 'compibot_update_options_status', true, 30 );
		// Redirige de vuelta a la página de configuraciones con un mensaje de éxito.
		wp_safe_redirect( admin_url( 'admin.php?page=compibot' ) );
		exit;
	}
}

/**
 * Guarda la configuración del módulo de horarios en la API de Compibot.
 *
 * @return void
 */
function compibot_save_hours_module() {
	if ( ! isset( $_POST['compibot_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['compibot_nonce'] ) ), 'compibot_save_hours_module_action' ) ) {
		wp_die( 'Permiso denegado: solicitud no válida.' );
	}

	$db_manager = new CompibotDatabaseManager();

	// Obtenemos los datos que vamos a pasar a la API.
	$token = $db_manager->compibot_select( 'token', 'plugin_token_compibot_page', 60 );

	// Array de días de la semana.
	// Ejemplo: [dias_semana] => Mar,Mié,Jue,Vie.
	$dias_semana = isset( $_POST['dias_semana'] ) ? sanitize_text_field( wp_unslash( $_POST['dias_semana'] ) ) : '';

	// Horario de inicio.
	$hora_inicio = isset( $_POST['horas_inicio'] ) ? sanitize_text_field( wp_unslash( $_POST['horas_inicio'] ) ) : '00:00';

	// Horario de fin.
	$hora_fin = isset( $_POST['horas_fin'] ) ? sanitize_text_field( wp_unslash( $_POST['horas_fin'] ) ) : '23:59';

	// Acción fuera del horario registrado.
	$accion = isset( $_POST['accion_horario'] ) ? sanitize_text_field( wp_unslash( $_POST['accion_horario'] ) ) : 'hidden';

	// Mensaje fuera del horario registrado.
	$message = isset( $_POST['mensaje_fuera_horario'] ) ? sanitize_text_field( wp_unslash( $_POST['mensaje_fuera_horario'] ) ) : '';

	if ( '' === $dias_semana ) {
		$dias_semana = array();
	} else {
		$dias_semana = explode( ',', $dias_semana );
	}

	$horas = array( $hora_inicio, $hora_fin );

	// Realizamos la llamada a la API para enviar las configuraciones.
	$response = wp_remote_post(
		'https://panel.compibot.com/api/set-sch-config/',
		array(
			'body'    => wp_json_encode(
				array(
					'dias_semana' => $dias_semana,
					'horas'       => $horas,
					'accion'      => $accion,
					'message'     => $message,
				)
			),
			'headers' => array(
				'Content-Type'  => 'application/json',
				'Authorization' => 'Bearer ' . $token,
			),
		)
	);

	// Procesamos la respuesta de la API.
	if ( is_wp_error( $response ) ) {
		wp_die( 'Error en la solicitud a la API: ' . esc_html( $response->get_error_message() ) );
	} else {
		$nonce = wp_create_nonce( 'compibot_save_settings_action' );

		set_transient( 'compibot_update_options_status', true, 30 );
		// Redirige de vuelta a la página de configuraciones con un mensaje de éxito.
		wp_safe_redirect( admin_url( 'admin.php?page=compibot' ) );
		exit;
	}
}

/**
 * Guarda la configuración del módulo de razonamiento avanzado en la API de Compibot.
 *
 * @return void
 */
function compibot_save_comportamiento_module() {
	if ( ! isset( $_POST['compibot_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['compibot_nonce'] ) ), 'compibot_save_comportamiento_module_action' ) ) {
		wp_die( 'Permiso denegado: solicitud no válida.' );
	}

	$db_manager = new CompibotDatabaseManager();

	// Obtenemos los datos que vamos a pasar a la API.
	$token = $db_manager->compibot_select( 'token', 'plugin_token_compibot_page', 60 );

	$enabled = isset( $_POST['enabled'] ) ? intval( $_POST['enabled'] ) : 0;

	// Realizamos la llamada a la API para enviar las configuraciones.
	$response = wp_remote_post(
		'https://panel.compibot.com/api/set-th-config/',
		array(
			'body'    => wp_json_encode(
				array(
					'enabled' => $enabled,
				)
			),
			'headers' => array(
				'Content-Type'  => 'application/json',
				'Authorization' => 'Bearer ' . $token,
			),
		)
	);

	// Procesamos la respuesta de la API.
	if ( is_wp_error( $response ) ) {
		wp_die( 'Error en la solicitud a la API: ' . esc_html( $response->get_error_message() ) );
	} else {
		$nonce = wp_create_nonce( 'compibot_save_settings_action' );

		set_transient( 'compibot_update_options_status', true, 30 );
		// Redirige de vuelta a la página de configuraciones con un mensaje de éxito.
		wp_safe_redirect( admin_url( 'admin.php?page=compibot' ) );
		exit;
	}
}

