/**
 * Dismiss popups & handle force logout on SimulENT pages
 * v1.3.0 - Utilise chrome.storage.session (partagé avec background.js)
 *
 * - Ferme le popup quickstart tutorial
 * - Force logout si garfill_force_logout est true (credentials d'un autre compte)
 * - Redirige vers /welcome ou /mediacentre après login
 */

(function() {
  'use strict';

  const BASE_URL = 'https://simulent.partenaire.test-gar.education.fr';

  /**
   * Récupère les credentials depuis chrome.storage.session
   */
  async function getStoredCredentials() {
    try {
      const data = await chrome.runtime.sendMessage({ action: 'getCredentials' });
      return data;
    } catch (e) {
      console.error('[GAR Autofill] Erreur lecture chrome.storage:', e);
      return {};
    }
  }

  /**
   * Efface les credentials
   */
  async function clearCredentials() {
    try {
      await chrome.runtime.sendMessage({ action: 'clearCredentials' });
    } catch (e) {
      console.error('[GAR Autofill] Erreur clear chrome.storage:', e);
    }
  }

  /**
   * Force le logout en naviguant directement vers l'URL de déconnexion
   * (plus fiable que de chercher/cliquer un bouton dans un dropdown)
   */
  function clickLogout() {
    const BASE_LOGOUT_URL = 'https://simulent.partenaire.test-gar.education.fr/auth/logout';
    const CALLBACK_URL = 'https://simulent.partenaire.test-gar.education.fr/auth/login';

    console.log('[GAR Autofill] 🚪 Redirection vers logout...');
    window.location.href = `${BASE_LOGOUT_URL}?callback=${encodeURIComponent(CALLBACK_URL)}`;
    return true;
  }

  /**
   * Gère le forceLogout si nécessaire
   */
  async function handleForceLogout() {
    const currentPath = window.location.pathname;

    // Si on est sur la page de login, laisser content.js gérer
    if (currentPath.includes('/auth/login')) {
      console.log('[GAR Autofill] Sur page login, content.js gère');
      return false;
    }

    // Ne PAS agir sur les pages IDP/logout (on est déjà en train de se déconnecter)
    if (currentPath.includes('/idp/') || currentPath.includes('/logout') || currentPath.includes('/Logout')) {
      console.log('[GAR Autofill] Page IDP/logout, skip forceLogout');
      return false;
    }

    // Récupérer les données du storage (mises par background.js)
    const data = await getStoredCredentials();
    console.log('[GAR Autofill] Storage data:', {
      hasCredentials: !!data.garfill_credentials,
      forceLogout: data.garfill_force_logout,
      redirect: data.garfill_redirect,
      timestamp: data.garfill_timestamp
    });

    // Vérifier si on doit faire un logout
    if (!data.garfill_credentials || !data.garfill_force_logout) {
      console.log('[GAR Autofill] Pas de forceLogout nécessaire');
      return false;
    }

    // Vérifier que le timestamp est récent (< 30 secondes)
    const age = Date.now() - (data.garfill_timestamp || 0);
    if (age > 30000) {
      console.log('[GAR Autofill] Credentials trop anciens, ignorés');
      await clearCredentials();
      return false;
    }

    console.log('[GAR Autofill] ⚠️ forceLogout détecté, logout en cours...');
    console.log('[GAR Autofill] Compte cible:', data.garfill_credentials.login);

    // NE PAS effacer les credentials - ils seront utilisés après le logout
    // Mais désactiver le flag forceLogout pour éviter une boucle (via message au background)
    try {
      await chrome.runtime.sendMessage({ action: 'disableForceLogout' });
    } catch (e) {
      console.error('[GAR Autofill] Erreur disableForceLogout:', e);
    }

    // Cliquer sur logout
    if (clickLogout()) {
      return true;
    }

    return false;
  }

  /**
   * Sur la page de confirmation de logout IDP, clique sur "Retourner à la page de connexion"
   */
  function handleIdpLogoutPage() {
    const currentPath = window.location.pathname;
    if (!currentPath.includes('/idp/profile/Logout')) {
      return false;
    }

    console.log('[GAR Autofill] 🔄 Page de confirmation logout IDP détectée');

    // Chercher le lien/bouton pour retourner à la connexion
    const links = document.querySelectorAll('a, button');
    for (const link of links) {
      const text = link.textContent.toLowerCase();
      if (text.includes('connexion') || text.includes('login') || text.includes('retourner')) {
        console.log('[GAR Autofill] 🔗 Click sur:', link.textContent.trim());
        link.click();
        return true;
      }
    }

    console.log('[GAR Autofill] Bouton retour non trouvé, retry...');
    return false;
  }

  /**
   * Ferme le popup quickstart
   */
  function dismissQuickstart(attempt = 1) {
    const ignoreLinks = document.querySelectorAll('a');
    for (const link of ignoreLinks) {
      if (link.textContent.trim().toLowerCase() === 'ignore') {
        console.log('[GAR Autofill] 🚫 Fermeture popup quickstart');
        link.click();
        return true;
      }
    }

    if (attempt < 10) {
      setTimeout(() => dismissQuickstart(attempt + 1), 500);
    }
    return false;
  }

  /**
   * Gère la redirection après login
   */
  async function handleRedirect() {
    const currentPath = window.location.pathname;

    // Ne PAS agir sur les pages intermédiaires (IDP, logout, auth)
    // Ces pages font partie du flux de logout/login, il faut les laisser se terminer
    if (currentPath.includes('/idp/') || currentPath.includes('/logout') || currentPath.includes('/Logout')) {
      console.log('[GAR Autofill] Page intermédiaire (IDP/logout), skip');
      return;
    }

    const data = await getStoredCredentials();
    const redirect = data.garfill_redirect;

    if (!redirect) {
      console.log('[GAR Autofill] Pas de redirect stocké');
      return;
    }

    // Ne pas rediriger si on est déjà sur la bonne page
    if (currentPath.includes(redirect)) {
      console.log('[GAR Autofill] Déjà sur la bonne page');
      await clearCredentials();
      return;
    }

    // Ne pas rediriger si on est encore sur la page de login
    if (currentPath.includes('/auth/login')) {
      console.log('[GAR Autofill] Encore sur login, skip redirect');
      return;
    }

    // Vérifier que le timestamp est récent
    const age = Date.now() - (data.garfill_timestamp || 0);
    if (age > 60000) {
      console.log('[GAR Autofill] Redirect trop ancien, ignoré');
      await clearCredentials();
      return;
    }

    console.log('[GAR Autofill] 🔀 Redirection vers:', redirect);
    await clearCredentials();
    window.location.href = `${BASE_URL}/${redirect}`;
  }

  // Lancer après un court délai (DOM prêt)
  setTimeout(async () => {
    console.log('[GAR Autofill] dismiss-popups.js v1.3.6 sur:', window.location.pathname);

    // 0. Si on est sur la page de confirmation logout IDP, cliquer sur retour
    if (handleIdpLogoutPage()) {
      return;
    }

    // 1. Vérifier si on doit faire un logout forcé
    const didLogout = await handleForceLogout();
    if (didLogout) {
      // Logout en cours, ne pas faire le reste
      return;
    }

    // 2. Fermer le popup quickstart
    dismissQuickstart();

    // 3. Gérer la redirection
    await handleRedirect();
  }, 1000);

})();
