// ══════════════════════════════════════════════
// RRB Admin — Module: auth
// Login dual (admin + centro), sesión y autenticación
// ══════════════════════════════════════════════

function showDashboard(usuario) {
  pageLogin.style.display = 'none';
  pageDash.style.display  = 'flex';
  const n = usuario || (esCentro() ? getCdNombre() : 'Admin');
  userNameEl.textContent = n;
  welcomeEl.textContent  = n;
  avatarEl.textContent   = n.charAt(0).toUpperCase();
  // Badge DB Remota (solo admin)
  const badgeDb = document.getElementById('badge-db-remota');
  if (badgeDb) badgeDb.style.display = (!esCentro() && localStorage.getItem('rrb_db_remote') === '1') ? 'inline-block' : 'none';
  // Aplicar rol (filtra sidebar + tema)
  aplicarRol();
  // Cargar dashboard
  _dashLoaded = false;
  cargarDashboard();
}

function showLogin() {
  pageDash.style.display  = 'none';
  pageLogin.style.display = 'flex';
  inpUser.value = ''; inpPass.value = '';
  hideAlert();
  // Limpiar tema centro
  document.body.classList.remove('role-centro');
  document.body.classList.remove('role-admin');
}

togglePass.addEventListener('click', () => {
  const show = inpPass.type === 'password';
  inpPass.type = show ? 'text' : 'password';
  togglePass.textContent = show ? '🙈' : '👁';
});

async function checkSession() {
  const tkn  = token();
  const user = localStorage.getItem(USER_KEY);
  if (!tkn) return showLogin();
  try {
    const data = await api('POST', 'api/verify-token.php');
    if (data.success) {
      // Actualizar datos de rol en localStorage
      const d = data.data || {};
      localStorage.setItem(ROLE_KEY, d.role || 'admin');
      if (d.cd_id)     localStorage.setItem(CD_ID_KEY, d.cd_id);
      if (d.cd_nombre) localStorage.setItem(CD_NOMBRE_KEY, d.cd_nombre);
      if (d.modulos)   localStorage.setItem(MODULOS_KEY, JSON.stringify(d.modulos));
      showDashboard(d.cd_nombre || d.usuario || user);
    } else {
      localStorage.clear();
      showLogin();
    }
  } catch { localStorage.clear(); showLogin(); }
}

loginForm.addEventListener('submit', async (e) => {
  e.preventDefault();
  hideAlert();
  const usuario  = inpUser.value.trim();
  const password = inpPass.value.trim();
  if (!usuario || !password) { showAlert('Ingresa tu usuario y contraseña'); return; }
  btnLogin.disabled = true;
  btnLogin.innerHTML = '<span class="spinner"></span>Verificando...';
  try {
    const data = await fetch(`${API}/login.php`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ usuario, password })
    }).then(r => r.json());
    if (data.success) {
      const d = data.data;
      localStorage.setItem(TOKEN_KEY, d.token);
      localStorage.setItem(USER_KEY,  d.usuario);
      localStorage.setItem(ROLE_KEY,  d.role || 'admin');
      localStorage.removeItem('rrb_db_remote');
      // Guardar datos de centro si aplica
      if (d.role === 'centro') {
        localStorage.setItem(CD_ID_KEY,     d.cd_id);
        localStorage.setItem(CD_NOMBRE_KEY, d.cd_nombre || '');
        localStorage.setItem(MODULOS_KEY,   JSON.stringify(d.modulos || []));
      } else {
        localStorage.removeItem(CD_ID_KEY);
        localStorage.removeItem(CD_NOMBRE_KEY);
        localStorage.removeItem(MODULOS_KEY);
      }
      const nombre = d.role === 'centro' ? (d.cd_nombre || d.usuario) : d.usuario;
      showAlert('Acceso correcto. Cargando...', 'success');
      setTimeout(() => showDashboard(nombre), 700);
    } else {
      showAlert(data.message || 'Usuario o contraseña incorrectos');
    }
  } catch { showAlert('Error de conexión. Intenta de nuevo.'); }
  finally {
    btnLogin.disabled = false;
    btnLogin.innerHTML = 'Iniciar sesión';
  }
});

btnLogout.addEventListener('click', async () => {
  try { await api('POST', 'logout.php'); } catch {}
  localStorage.clear();
  showLogin();
});
