/**
 * GAR Autofill - Background Service Worker
 *
 * Intercepte les navigations vers SimulENT pour capturer les paramètres
 * AVANT toute redirect serveur (302).
 *
 * Problème résolu: quand l'utilisateur est déjà connecté, le serveur
 * fait une 302 redirect vers /timeline AVANT que le JS puisse s'exécuter,
 * perdant ainsi les paramètres garfill/forceLogout.
 */

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

/**
 * Écoute les navigations vers SimulENT
 */
chrome.webNavigation.onBeforeNavigate.addListener(async (details) => {
  // Ignorer les iframes
  if (details.frameId !== 0) return;

  const url = new URL(details.url);

  // Vérifier si c'est une URL SimulENT avec garfill
  if (!url.origin.includes('simulent.partenaire.test-gar.education.fr')) return;

  const garfill = url.searchParams.get('garfill');
  const redirect = url.searchParams.get('redirect');
  const forceLogout = url.searchParams.get('forceLogout');

  if (!garfill) return;

  console.log('[GAR Background] 📡 Navigation détectée avec garfill:', url.pathname);
  console.log('[GAR Background] Params: garfill=...', redirect ? ', redirect=' + redirect : '', forceLogout ? ', forceLogout=' + forceLogout : '');

  try {
    // Décoder les credentials
    const credentials = JSON.parse(atob(garfill));

    if (credentials.login && credentials.password) {
      // Stocker dans chrome.storage.session (partagé avec content scripts)
      await chrome.storage.session.set({
        garfill_credentials: credentials,
        garfill_redirect: redirect || null,
        garfill_force_logout: forceLogout === '1',
        garfill_timestamp: Date.now()
      });

      console.log('[GAR Background] ✅ Credentials stockés pour:', credentials.login);
    }
  } catch (e) {
    console.error('[GAR Background] ❌ Erreur décodage garfill:', e);
  }
}, {
  url: [{ hostContains: 'simulent.partenaire.test-gar.education.fr' }]
});

/**
 * Écoute les messages des content scripts
 */
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  if (message.action === 'getCredentials') {
    chrome.storage.session.get([
      'garfill_credentials',
      'garfill_redirect',
      'garfill_force_logout',
      'garfill_timestamp'
    ]).then(data => {
      sendResponse(data);
    });
    return true; // Indique qu'on répondra de manière asynchrone
  }

  if (message.action === 'clearCredentials') {
    chrome.storage.session.remove([
      'garfill_credentials',
      'garfill_redirect',
      'garfill_force_logout',
      'garfill_timestamp'
    ]).then(() => {
      console.log('[GAR Background] 🧹 Credentials effacés');
      sendResponse({ success: true });
    });
    return true;
  }

  if (message.action === 'markUsed') {
    chrome.storage.session.set({ garfill_used: true }).then(() => {
      console.log('[GAR Background] ✅ Marqué comme utilisé');
      sendResponse({ success: true });
    });
    return true;
  }

  if (message.action === 'disableForceLogout') {
    chrome.storage.session.set({ garfill_force_logout: false }).then(() => {
      console.log('[GAR Background] 🚫 forceLogout désactivé');
      sendResponse({ success: true });
    });
    return true;
  }
});

/**
 * Detect idp-auth logout page and redirect back to login if credentials pending
 */
chrome.webNavigation.onCompleted.addListener(async (details) => {
  if (details.frameId !== 0) return;

  console.log('[GAR Background] 🔄 Logout page detected, checking credentials...');

  const data = await chrome.storage.session.get([
    'garfill_credentials',
    'garfill_timestamp'
  ]);

  if (!data.garfill_credentials) {
    console.log('[GAR Background] No pending credentials, ignoring logout page');
    return;
  }

  const age = Date.now() - (data.garfill_timestamp || 0);
  if (age > 120000) {
    console.log('[GAR Background] Credentials too old, ignoring');
    return;
  }

  console.log('[GAR Background] 🔄 Redirecting from logout to login...');
  chrome.tabs.update(details.tabId, {
    url: 'https://simulent.partenaire.test-gar.education.fr/auth/login'
  });
}, {
  url: [{ hostContains: 'idp-auth.partenaire.test-gar.education.fr', pathPrefix: '/logout' }]
});

console.log('[GAR Background] Service worker chargé v1.3.7');
