"use client"; import { useState, useEffect, useMemo } from "react"; import { config } from "@/lib/config"; export interface ClientData { bungalowNumber: string; wifiName: string; wifiPassword: string; gerantMessage: string; } const STORAGE_KEY = "clientData"; function loadFromStorage(): ClientData | null { if (typeof window === "undefined") return null; try { const stored = localStorage.getItem(STORAGE_KEY); if (stored) { return JSON.parse(stored); } } catch (error) { console.error("Erreur lors du chargement depuis localStorage:", error); } return null; } export function useClientData() { // Utiliser window.location pour l'export statique (compatible) const [token, setToken] = useState(null); // Charger immédiatement depuis localStorage pour éviter le délai const [clientData, setClientData] = useState(() => loadFromStorage()); const [loading, setLoading] = useState(true); useEffect(() => { // Récupérer le token depuis l'URL (compatible export statique) if (typeof window !== "undefined") { const urlParams = new URLSearchParams(window.location.search); setToken(urlParams.get("token")); } }, []); useEffect(() => { if (token === null && typeof window !== "undefined") { // Attendre que le token soit récupéré const urlParams = new URLSearchParams(window.location.search); setToken(urlParams.get("token")); return; } const loadClientData = async () => { // 1. Charger d'abord depuis localStorage pour un affichage immédiat const storedData = loadFromStorage(); if (storedData) { setClientData(storedData); setLoading(false); } // 2. Vérifier s'il y a un token dans l'URL if (token) { try { // 3. Charger les données depuis l'API pour mettre à jour const response = await fetch(`/api/client/${token}`); if (response.ok) { const data = await response.json(); const clientInfo: ClientData = { bungalowNumber: data.bungalowNumber, wifiName: data.wifiName, wifiPassword: data.wifiPassword, gerantMessage: data.gerantMessage, }; // 4. Sauvegarder dans localStorage if (typeof window !== "undefined") { localStorage.setItem(STORAGE_KEY, JSON.stringify(clientInfo)); } setClientData(clientInfo); } else { // Token invalide, garder les données sauvegardées si disponibles if (!storedData) { setClientData(null); } } } catch (error) { console.error("Erreur lors du chargement des données client:", error); // En cas d'erreur, garder les données sauvegardées si disponibles if (!storedData) { setClientData(null); } } } setLoading(false); }; loadClientData(); }, [token]); // Retourner les données client ou les valeurs par défaut return useMemo(() => ({ bungalowNumber: clientData?.bungalowNumber || config.bungalowNumber, wifiName: clientData?.wifiName || config.wifiName, wifiPassword: clientData?.wifiPassword || config.wifiPassword, gerantMessage: clientData?.gerantMessage || config.gerantMessage, loading, }), [clientData, loading]); }