/**
 * Service d'analyse pour Geosector
 * Ce service permet de suivre l'activité des utilisateurs qui ont accepté les cookies
 */

import { getCookie } from './cookieService.js';

// Clé pour le stockage local du dernier suivi
const LAST_TRACKING_KEY = 'geosector_last_tracking';

// Fonction pour enregistrer une visite de page
export function trackPageView(page) {
  // Ne suivre que si l'utilisateur a accepté les cookies
  if (getCookie('geosector_cookies_accepted') !== 'true') {
    console.log('Suivi désactivé : cookies non acceptés');
    return;
  }
  
  // Vérifier si nous devons suivre aujourd'hui (tous les 2 jours)
  if (!shouldTrackToday()) {
    console.log('Suivi différé : déjà suivi dans les 2 derniers jours');
    return;
  }
  
  // Enregistrer la date du dernier suivi
  localStorage.setItem(LAST_TRACKING_KEY, new Date().toISOString());
  
  // Ici, vous pouvez implémenter le code réel pour envoyer les données d'analyse
  // Par exemple, une requête fetch vers votre propre endpoint d'analyse
  console.log(`Page consultée: ${page} - ${new Date().toISOString()}`);
  
  // Exemple d'implémentation avec un endpoint d'analyse
  /*
  fetch('/api/analytics/pageview', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      page,
      timestamp: new Date().toISOString(),
      // Autres données anonymes comme la source de trafic, etc.
      referrer: document.referrer || 'direct',
      screenSize: `${window.innerWidth}x${window.innerHeight}`,
      // Un identifiant de session anonyme (pas d'information personnelle)
      sessionId: getAnonymousSessionId()
    }),
  }).catch(error => {
    console.error('Erreur lors du suivi', error);
  });
  */
}

// Fonction pour vérifier si nous devons suivre aujourd'hui
function shouldTrackToday() {
  const lastTracking = localStorage.getItem(LAST_TRACKING_KEY);
  
  if (!lastTracking) {
    return true; // Première visite, nous devons suivre
  }
  
  const lastTrackingDate = new Date(lastTracking);
  const now = new Date();
  
  // Calculer la différence en millisecondes
  const diffTime = Math.abs(now - lastTrackingDate);
  // Convertir en jours
  const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
  
  // Ne suivre que tous les 2 jours
  return diffDays >= 2;
}

// Générer un ID de session anonyme
function getAnonymousSessionId() {
  // Vérifier si nous avons déjà un ID de session
  let sessionId = sessionStorage.getItem('anonymous_session_id');
  
  if (!sessionId) {
    // Créer un ID de session aléatoire
    sessionId = Math.random().toString(36).substring(2, 15);
    sessionStorage.setItem('anonymous_session_id', sessionId);
  }
  
  return sessionId;
}

// Fonction pour suivre un événement spécifique
export function trackEvent(category, action, label = null) {
  // Ne suivre que si l'utilisateur a accepté les cookies
  if (getCookie('geosector_cookies_accepted') !== 'true') {
    return;
  }
  
  // Vérifier si nous devons suivre aujourd'hui
  if (!shouldTrackToday()) {
    return;
  }
  
  console.log(`Événement: ${category} - ${action} - ${label || 'N/A'}`);
  
  // Exemple d'implémentation avec un endpoint d'analyse
  /*
  fetch('/api/analytics/event', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      category,
      action,
      label,
      timestamp: new Date().toISOString(),
      sessionId: getAnonymousSessionId()
    }),
  }).catch(error => {
    console.error('Erreur lors du suivi d\'événement', error);
  });
  */
}
