/**
 * TASKMATE - Auth Fix
 * ====================
 * Behebt Authentifizierungs-Probleme
 */

// Überwache alle API-Anfragen
const originalFetch = window.fetch;
window.fetch = async function(...args) {
  try {
    const response = await originalFetch.apply(this, args);
    
    // Bei 401: Automatisches Token-Refresh versuchen
    if (response.status === 401 && !args[0].includes('/auth/login')) {
      console.log('[AuthFix] 401 erkannt, versuche Token-Refresh...');
      
      const token = localStorage.getItem('token');
      const refreshToken = localStorage.getItem('refreshToken');
      
      if (token) {
        try {
          // Versuche Token-Refresh
          const refreshResponse = await originalFetch('/api/auth/refresh', {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json',
              'Authorization': `Bearer ${token}`
            },
            body: JSON.stringify({ refreshToken: refreshToken || token })
          });
          
          if (refreshResponse.ok) {
            const data = await refreshResponse.json();
            console.log('[AuthFix] Token erfolgreich erneuert');
            
            // Neue Tokens speichern
            localStorage.setItem('token', data.token);
            if (data.refreshToken) {
              localStorage.setItem('refreshToken', data.refreshToken);
            }
            
            // Original-Request mit neuem Token wiederholen
            if (args[1] && args[1].headers) {
              args[1].headers['Authorization'] = `Bearer ${data.token}`;
            }
            
            return originalFetch.apply(this, args);
          }
        } catch (error) {
          console.error('[AuthFix] Token-Refresh fehlgeschlagen:', error);
        }
      }
    }
    
    return response;
  } catch (error) {
    throw error;
  }
};

// Stelle sicher, dass das Token bei jedem Request aktuell ist
document.addEventListener('DOMContentLoaded', () => {
  console.log('[AuthFix] Auth-Fix geladen');
  
  // Prüfe Token-Gültigkeit alle 5 Minuten
  setInterval(() => {
    const token = localStorage.getItem('token');
    if (token) {
      // Dekodiere JWT um Ablaufzeit zu prüfen
      try {
        const payload = JSON.parse(atob(token.split('.')[1]));
        const expiresIn = payload.exp * 1000 - Date.now();
        
        // Wenn Token in weniger als 10 Minuten abläuft, erneuere es
        if (expiresIn < 10 * 60 * 1000) {
          console.log('[AuthFix] Token läuft bald ab, erneuere...');
          fetch('/api/auth/refresh', {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json',
              'Authorization': `Bearer ${token}`
            },
            body: JSON.stringify({ refreshToken: localStorage.getItem('refreshToken') || token })
          }).then(response => {
            if (response.ok) {
              return response.json();
            }
          }).then(data => {
            if (data && data.token) {
              localStorage.setItem('token', data.token);
              if (data.refreshToken) {
                localStorage.setItem('refreshToken', data.refreshToken);
              }
              console.log('[AuthFix] Token automatisch erneuert');
            }
          });
        }
      } catch (error) {
        console.error('[AuthFix] Fehler beim Token-Check:', error);
      }
    }
  }, 5 * 60 * 1000); // Alle 5 Minuten
});