"use client"; import { useState, useEffect, useMemo } from "react"; import { useSearchParams } from "next/navigation"; 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() { const searchParams = useSearchParams(); // Charger immédiatement depuis localStorage pour éviter le délai const [clientData, setClientData] = useState(() => loadFromStorage()); const [loading, setLoading] = useState(true); useEffect(() => { 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 const token = searchParams.get("token"); 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(); }, [searchParams]); // 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]); }