"use client"; import { useCallback, useEffect, useState } from "react"; export const FARM_HUB_STORAGE_KEY = "farm_hub"; const LEGACY_SENSOR_HUB_STORAGE_KEY = "sensor_hub"; export interface FarmHubInfo { farm_uuid: string; id?: string; name?: string; is_active?: boolean; [key: string]: unknown; } export interface UseFarmHubReturn { farmHub: FarmHubInfo | null; hasFarmHub: boolean; setFarmHub: (data: FarmHubInfo | null) => void; getFarmUuid: () => string | null; } const normalizeFarmHub = (raw: unknown): FarmHubInfo | null => { if (!raw || typeof raw !== "object") { return null; } const candidate = raw as Record; const farmUuid = typeof candidate.farm_uuid === "string" ? candidate.farm_uuid : typeof candidate.id === "string" ? candidate.id : null; if (!farmUuid) { return null; } return { ...candidate, farm_uuid: farmUuid, id: typeof candidate.id === "string" ? candidate.id : farmUuid, } as FarmHubInfo; }; const parseFarmHub = (raw: string | null): FarmHubInfo | null => { if (!raw) return null; try { return normalizeFarmHub(JSON.parse(raw)); } catch { return null; } }; export const getStoredFarmHub = (): FarmHubInfo | null => { if (typeof window === "undefined") return null; return ( parseFarmHub(localStorage.getItem(FARM_HUB_STORAGE_KEY)) ?? parseFarmHub(localStorage.getItem(LEGACY_SENSOR_HUB_STORAGE_KEY)) ); }; export const getStoredFarmUuid = (): string | null => getStoredFarmHub()?.farm_uuid ?? null; export const useFarmHub = (): UseFarmHubReturn => { const [farmHub, setFarmHubState] = useState(null); useEffect(() => { setFarmHubState(getStoredFarmHub()); }, []); const setFarmHub = useCallback((data: FarmHubInfo | null) => { if (typeof window === "undefined") return; if (data === null) { localStorage.removeItem(FARM_HUB_STORAGE_KEY); setFarmHubState(null); return; } const normalized = normalizeFarmHub(data); if (!normalized) { return; } localStorage.setItem(FARM_HUB_STORAGE_KEY, JSON.stringify(normalized)); setFarmHubState(normalized); }, []); const getFarmUuid = useCallback(() => { return farmHub?.farm_uuid ?? getStoredFarmUuid(); }, [farmHub]); return { farmHub, hasFarmHub: farmHub !== null, setFarmHub, getFarmUuid, }; };