/* =========================================================
   NOVA X — auth.js
   Autenticación 100% simulada en el navegador con LocalStorage.
   No hay backend real: NO uses contraseñas verdaderas aquí,
   esto es solo una demostración de flujo de login/registro.
   ========================================================= */

const NovaAuth = (() => {
  const USERS_KEY = "novax_users";
  const SESSION_KEY = "novax_session";
  const ORDERS_KEY = "novax_orders";

  function obtenerUsuarios() {
    try {
      return JSON.parse(localStorage.getItem(USERS_KEY)) || [];
    } catch {
      return [];
    }
  }

  function guardarUsuarios(lista) {
    localStorage.setItem(USERS_KEY, JSON.stringify(lista));
  }

  function normalizarEmail(email) {
    return String(email).trim().toLowerCase();
  }

  /* ---------- Registro ---------- */
  function registrar(nombre, email, password) {
    const correo = normalizarEmail(email);
    const usuarios = obtenerUsuarios();

    if (!nombre.trim() || !correo || !password) {
      return { ok: false, mensaje: "Completa todos los campos." };
    }
    if (usuarios.some((u) => u.email === correo)) {
      return { ok: false, mensaje: "Ya existe una cuenta con ese correo." };
    }

    usuarios.push({ nombre: nombre.trim(), email: correo, password });
    guardarUsuarios(usuarios);
    localStorage.setItem(SESSION_KEY, correo);
    return { ok: true, mensaje: "Cuenta creada correctamente." };
  }

  /* ---------- Inicio de sesión ---------- */
  function iniciarSesion(email, password) {
    const correo = normalizarEmail(email);
    const usuarios = obtenerUsuarios();
    const usuario = usuarios.find((u) => u.email === correo && u.password === password);

    if (!usuario) {
      return { ok: false, mensaje: "Correo o contraseña incorrectos." };
    }

    localStorage.setItem(SESSION_KEY, correo);
    return { ok: true, mensaje: "Sesión iniciada correctamente." };
  }

  function cerrarSesion() {
    localStorage.removeItem(SESSION_KEY);
  }

  function usuarioActual() {
    const correo = localStorage.getItem(SESSION_KEY);
    if (!correo) return null;
    return obtenerUsuarios().find((u) => u.email === correo) || null;
  }

  function estaLogueado() {
    return !!usuarioActual();
  }

  /* ---------- Historial de compras (por cuenta) ---------- */
  function obtenerTodosLosPedidos() {
    try {
      return JSON.parse(localStorage.getItem(ORDERS_KEY)) || {};
    } catch {
      return {};
    }
  }

  function guardarPedido(email, pedido) {
    if (!email) return;
    const correo = normalizarEmail(email);
    const todos = obtenerTodosLosPedidos();
    const lista = todos[correo] || [];
    lista.unshift(pedido);
    todos[correo] = lista;
    localStorage.setItem(ORDERS_KEY, JSON.stringify(todos));
  }

  function obtenerPedidos(email) {
    if (!email) return [];
    const correo = normalizarEmail(email);
    return obtenerTodosLosPedidos()[correo] || [];
  }

  /* ---------- Protección de páginas privadas ---------- */
  function protegerPagina(paginaLogin = "login.html") {
    if (!estaLogueado()) {
      const actual = window.location.pathname.split("/").pop() || "perfil.html";
      window.location.replace(`${paginaLogin}?next=${encodeURIComponent(actual)}`);
    }
  }

  /* ---------- Actualiza los enlaces "Mi cuenta" en el header ---------- */
  function actualizarUI() {
    const usuario = usuarioActual();
    document.querySelectorAll("[data-account-link]").forEach((link) => {
      link.href = usuario ? "perfil.html" : "login.html";
      link.title = usuario ? `Mi cuenta · ${usuario.nombre}` : "Iniciar sesión";
      link.setAttribute("aria-label", usuario ? `Mi cuenta de ${usuario.nombre}` : "Iniciar sesión");
    });
  }

  function init() {
    actualizarUI();
  }

  return {
    registrar,
    iniciarSesion,
    cerrarSesion,
    usuarioActual,
    estaLogueado,
    protegerPagina,
    actualizarUI,
    init,
    guardarPedido,
    obtenerPedidos,
  };
})();
window.NovaAuth = NovaAuth;
