
import { useState, useEffect } from "react";

/**
 * Hook pour obtenir et mettre à jour les informations sur l'architecture de l'application
 * Ce hook fournit une API pour enregistrer des modifications architecturales
 * sans avoir à afficher le document sur une page web.
 */
export function useArchitectureDocument() {
  const [lastUpdated, setLastUpdated] = useState<Date>(new Date());
  const [changeCount, setChangeCount] = useState<number>(0);

  useEffect(() => {
    // Récupérer la date de dernière mise à jour et le compteur de modifications depuis le localStorage
    const storedLastUpdated = localStorage.getItem('architecture_last_updated');
    const storedChangeCount = localStorage.getItem('architecture_change_count');

    if (storedLastUpdated) {
      setLastUpdated(new Date(storedLastUpdated));
    }

    if (storedChangeCount) {
      setChangeCount(parseInt(storedChangeCount, 10));
    }
  }, []);

  /**
   * Enregistre une mise à jour de l'architecture
   * @param changeDescription Description de la modification
   */
  const recordChange = (changeDescription: string) => {
    const now = new Date();

    // Mettre à jour la date et le compteur
    setLastUpdated(now);
    setChangeCount(prev => prev + 1);

    // Sauvegarder dans le localStorage
    localStorage.setItem('architecture_last_updated', now.toISOString());
    localStorage.setItem('architecture_change_count', (changeCount + 1).toString());

    // Ajouter la modification à l'historique
    const changesHistory = JSON.parse(localStorage.getItem('architecture_changes_history') || '[]');
    changesHistory.push({
      date: now.toISOString(),
      description: changeDescription
    });

    // Limiter l'historique à 100 entrées pour éviter d'encombrer le localStorage
    if (changesHistory.length > 100) {
      changesHistory.shift();
    }

    localStorage.setItem('architecture_changes_history', JSON.stringify(changesHistory));

    console.log(`📝 Documentation d'architecture mise à jour: ${changeDescription}`);
  };

  /**
   * Récupère l'historique des modifications
   */
  const getChangesHistory = () => {
    return JSON.parse(localStorage.getItem('architecture_changes_history') || '[]');
  };

  /**
   * Récupère le contenu du document d'architecture
   */
  const getArchitectureDoc = () => {
    return {
      lastUpdated,
      changeCount,
      history: getChangesHistory()
    };
  };

  return {
    lastUpdated,
    changeCount,
    recordChange,
    getChangesHistory,
    getArchitectureDoc
  };
}
