let idUsuarioSesion = null;
$(document).ready(function () {
// Cargar la cabecera HTML e iniciar comprobación de sesión SOLO al terminar de cargar
$("#cabecera-container").load("cabecera.html", function (response, status, xhr) {
if (status === "error") {
console.error("Error al cargar cabecera.html:", xhr.status, xhr.statusText);
} else {
comprobarSesion();
}
});
});
// Función auxiliar para escapar texto HTML
function escapeHTML(str) {
return $("
").text(str ?? "").html();
}
// Comprobar estado de sesión al cargar la página
function comprobarSesion() {
$.ajax({
method: "POST",
url: "controladores/controladorUsuario.php",
dataType: "json",
data: { orden: "comprobarSesion" },
})
.done(function (respuesta) {
const contenedor = $("#contenedorUsuarioCabecera");
if (!contenedor.length) return; // Si aún no existe el contenedor en HTML, cancelamos
contenedor.empty();
if (respuesta && respuesta.activa && respuesta.usuario) {
// Guardar idUsuario globalmente
idUsuarioSesion = respuesta.usuario.idUsuario;
const avatarUrl = respuesta.usuario.avatar || "img/avatars/defaultProfile.jpeg";
// Usuario autenticado: Menú desplegable
const htmlUsuario = `
${escapeHTML(respuesta.usuario.nombreUsuario)}
`;
contenedor.html(htmlUsuario);
// Si estamos en la página de perfil, rellenamos nombre y foto
if ($("#nombre").length) {
$("#nombre").text(respuesta.usuario.nombreUsuario);
// ?t= evita que el navegador enseñe la foto antigua en caché
$("#fotoPerfil").attr("src", avatarUrl + "?t=" + new Date().getTime());
}
// Si estamos en la página principal, mostramos el botón JUGAR
if ($("#colBotonJugar").length) {
$("#colBotonJugar").removeClass("d-none");
$("#colRanking").removeClass("col-lg-8").addClass("col-lg-7 col-xl-8");
}
} else {
// Si estamos en el perfil y no hay sesión, volvemos al inicio
if ($("#nombre").length) {
window.location.href = "index.php";
return;
}
// No hay sesión: Botones de Login y Registro
const htmlInvitado = `
Iniciar Sesión
Registrarse
`;
contenedor.html(htmlInvitado);
if ($("#colBotonJugar").length) {
$("#colBotonJugar").addClass("d-none");
$("#colRanking").removeClass("col-lg-7 col-xl-8").addClass("col-lg-8");
}
}
})
.fail(function (xhr, status, error) {
console.error("Error en comprobarSesion AJAX:", error, xhr.responseText);
});
}
// Registro de usuario
$(document).on("click", "#botonAceptarRegistro", function (event) {
event.preventDefault();
let nombreUsuario = $("#regNombre").val().trim();
let email = $("#regEmail").val().trim();
let contrasena = $("#regPassword").val();
let contrasenaConfirmacion = $("#regPasswordConfirm").val();
// Resetear estados visuales
$("#regNombre, #regEmail, #regPassword, #regPasswordConfirm").removeClass("is-invalid");
$("#errorRegistro").removeClass("text-danger text-success").text("").show();
if (contrasena !== contrasenaConfirmacion) {
$("#regPassword, #regPasswordConfirm").addClass("is-invalid");
$("#errorRegistro").addClass("text-danger").text("Las contraseñas no coinciden.");
return;
}
$.ajax({
method: "POST",
url: "controladores/controladorUsuario.php",
dataType: "json",
data: {
nombreUsuario: nombreUsuario,
email: email,
contrasena: contrasena,
orden: "registrarUsuario",
},
})
.done(function (respuesta) {
if (respuesta.error) {
$("#errorRegistro").addClass("text-danger").text(respuesta.error);
$("#regNombre, #regEmail").addClass("is-invalid");
} else {
// Mostrar mensaje de confirmación
$("#errorRegistro")
.removeClass("text-danger")
.addClass("text-success fw-bold")
.text(respuesta.exito || "¡Registro completado con éxito!");
if ($("#formRegistro").length) {
$("#formRegistro")[0].reset();
}
// Recargar para iniciar sesión tras 1.5 segundos
setTimeout(function () {
location.reload();
}, 1500);
}
})
.fail(function (xhr, status, error) {
console.error("Error en el registro:", error, xhr.responseText);
$("#errorRegistro").addClass("text-danger").text("Error de conexión con el servidor.");
});
});
// Login de usuario
$(document).on("click", "#botonAceptarLogin", function (event) {
event.preventDefault();
let email = $("#loginEmail").val().trim();
let contrasena = $("#loginPassword").val();
let recuerdame = $("#recordar").is(":checked");
$("#loginEmail, #loginPassword").removeClass("is-invalid");
$("#errorLogin").removeClass("text-success").addClass("text-danger").text("").show();
if (email === "" || contrasena === "") {
$("#errorLogin").text("Todos los campos son obligatorios.");
if (email === "") $("#loginEmail").addClass("is-invalid");
if (contrasena === "") $("#loginPassword").addClass("is-invalid");
return;
}
$.ajax({
method: "POST",
url: "controladores/controladorUsuario.php",
dataType: "json",
data: {
email: email,
contrasena: contrasena,
recuerdame: recuerdame,
orden: "comprobarUsuario",
},
})
.done(function (respuesta) {
if (respuesta.error) {
$("#loginEmail, #loginPassword").addClass("is-invalid");
$("#errorLogin").text(respuesta.error);
} else {
// Login correcto: Recargar la vista
location.reload();
}
})
.fail(function (xhr, status, error) {
console.error("Error en el login:", error, xhr.responseText);
$("#errorLogin").text("Error de conexión o respuesta no válida del servidor.");
});
});
// Cerrar sesión
$(document).on("click", "#botonCerrarSesion", function (event) {
event.preventDefault();
$.ajax({
method: "POST",
url: "controladores/controladorUsuario.php",
dataType: "json",
data: { orden: "cerrarSesion" },
})
.done(function (respuesta) {
window.location.href = "index.php";
})
.fail(function () {
window.location.href = "index.php";
});
});