<?php
/**
 * Página de Login de Compibot.
 *
 * @package Compibot
 */

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

/**
 * Función para mostrar la página de login y manejar la lógica de autenticación.
 */
function compibot_login_page() {
	// Iniciar el buffer de salida para prevenir problemas de encabezados.
	$db_manager = new CompibotDatabaseManager();
	ob_start();
	global $wpdb;
	$table_name = $wpdb->prefix . 'compibot';

	// Si se ha enviado el formulario de inicio de sesión.
	if ( isset( $_SERVER['REQUEST_METHOD'] ) && 'POST' === $_SERVER['REQUEST_METHOD'] && isset( $_POST['email'] ) && isset( $_POST['password'] ) ) {
		// Verificamos el nonce.
		if ( ! isset( $_POST['compibot_compibot_login_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['compibot_compibot_login_nonce'] ) ), 'compibot_compibot_login_action' ) ) {
			wp_die( 'Permiso denegado: solicitud no válida.' );
		}
		$email    = sanitize_email( wp_unslash( $_POST['email'] ) );
		$password = sanitize_text_field( wp_unslash( $_POST['password'] ) );

		// Lógica de autenticación del usuario.
		$login_response = compibot_login( $email, $password );

		// Verificar si hay un error.
		if ( isset( $login_response['error'] ) ) {
			// Mapeamos los errores a mensajes amigables.
			$error_messages = array(
				'Correo o contraseña incorrectos' => 'Error: El correo electrónico o la contraseña son incorrectos.',
				'Invalid service'                 => 'Error: Servicio no válido. Contacta al soporte técnico.',
				'User not found'                  => 'Error: No se encontró un usuario con ese correo electrónico.',
				'Error al conectar con la API'    => 'Error: No se pudo conectar con el servicio de autenticación. Inténtalo más tarde.',
				'Email y contraseña obligatorios' => 'Error: El correo electrónico y la contraseña son campos obligatorios.',
				'Origen no válido'                => 'Error: No hay datos para el dominio del usuario.',
			);
			$error_message  = isset( $error_messages[ $login_response['error'] ] ) ? $error_messages[ $login_response['error'] ] : 'Error: Ocurrió un problema durante el inicio de sesión.';

		} elseif ( isset( $login_response['token'] ) && isset( $login_response['public_token'] ) ) {
			// Si la autenticación es exitosa, actualizamos el token y el public_token en la base de datos.
			$new_token    = sanitize_text_field( $login_response['token'] );
			$public_token = sanitize_text_field( $login_response['public_token'] );
			$db_manager->compibot_update(
				array(
					'token'        => $new_token,
					'public_token' => $public_token,
					'active'       => 1,
				),
				array( 'id' => 1 )
			);

			// Limpia el buffer de salida antes de redirigir.
			ob_end_clean();

			// Redirigimos inmediatamente a la página principal del plugin.
			wp_safe_redirect( admin_url( 'admin.php?page=compibot' ) );
			exit; // Asegúrate de salir después para evitar más procesamiento.
		} else {
			// Utilizamos `add_settings_error` para mostrar el mensaje en lugar de `echo`.
			$error_message = 'Error inesperado: No se encontró el token en la respuesta.';
		}
	}

	// Asegúrate de que ob_start no se llama aquí si la redirección ha ocurrido.
	ob_start();
	// Formulario de inicio de sesión.
	?>
	<div class="login-container">
		<h2>Iniciar sesión en Compibot</h2>
		<p>Introduce las credenciales que utilizaste en el registro de Compibot</p>

		<!-- Mostrar mensaje de error si existe -->
		<?php if ( ! empty( $error_message ) ) : ?>
			<div class="error-message" style="color: red; font-weight: bold; margin-bottom: 20px;">
				<?php echo esc_html( $error_message ); ?>
			</div>
		<?php endif; ?>

		<form method="POST" action="">
			<input type="hidden" name="compibot_compibot_login_nonce" value="<?php echo esc_attr( wp_create_nonce( 'compibot_compibot_login_action' ) ); ?>">
			<div class="form-group">
				<label for="email">Correo electrónico:</label>
				<input type="email" id="email" name="email" required>
			</div>
			<div class="form-group">
				<label for="password">Contraseña:</label>
				<input type="password" id="password" name="password" required>
			</div>
			
			<div class="forgot-password" style="margin-bottom: 10px;">
				<a 
					style="text-decoration: none; color: #4b04d7;font-size:16px;"
					href="https://compibot.com/password-reset"
					target="_blank"
				>
					Olvidé mi contraseña
				</a>
			</div>
			<button type="submit" class="login-btn">Iniciar sesión</button>
		</form>
	</div>
 
	<?php
	ob_end_flush();
}
