import { useState, useRef, useEffect } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; import { useSearchCache } from '@/lib/hooks/useSearchCache'; import { useParallelSearch } from '@/lib/hooks/useParallelSearch'; import { settingsStore } from '@/lib/store/settings-store'; export function useHomePage() { const router = useRouter(); const searchParams = useSearchParams(); const { loadFromCache, saveToCache } = useSearchCache(); const hasLoadedCache = useRef(false); const [query, setQuery] = useState(''); const [hasSearched, setHasSearched] = useState(false); const [currentSortBy, setCurrentSortBy] = useState('default'); // Search stream hook const { loading, results, availableSources, completedSources, totalSources, performSearch, resetSearch, loadCachedResults, applySorting, } = useParallelSearch( saveToCache, (q: string) => router.replace(`/?q=${encodeURIComponent(q)}`, { scroll: false }) ); // Re-sort results when sort preference changes useEffect(() => { if (hasSearched && results.length > 0) { applySorting(currentSortBy as any); } }, [currentSortBy, applySorting, hasSearched, results.length]); // Load sort preference on mount and subscribe to changes useEffect(() => { const updateSettings = () => { const settings = settingsStore.getSettings(); setCurrentSortBy(settings.sortBy); }; // Initial load updateSettings(); // Subscribe to changes const unsubscribe = settingsStore.subscribe(updateSettings); return () => unsubscribe(); }, []); // Load cached results on mount useEffect(() => { if (hasLoadedCache.current) return; hasLoadedCache.current = true; const urlQuery = searchParams.get('q'); const cached = loadFromCache(); if (urlQuery) { setQuery(urlQuery); if (cached && cached.query === urlQuery && cached.results.length > 0) { setHasSearched(true); loadCachedResults(cached.results, cached.availableSources); } else { handleSearch(urlQuery); } } }, [searchParams, loadFromCache, loadCachedResults]); const handleSearch = (searchQuery: string) => { setQuery(searchQuery); setHasSearched(true); const settings = settingsStore.getSettings(); // Filter enabled sources const enabledSources = settings.sources.filter(s => s.enabled); performSearch(searchQuery, enabledSources, currentSortBy as any); }; const handleReset = () => { setHasSearched(false); setQuery(''); resetSearch(); router.replace('/', { scroll: false }); }; return { query, hasSearched, loading, results, availableSources, completedSources, totalSources, handleSearch, handleReset, }; }