import { useState, useEffect } from 'react';
import { toolsApi, workflowsApi, packsApi, categoriesApi } from '@/api';
import { fetchWithCache } from '@/lib/api';
import { useNetworkUtils } from './useNetworkUtils';
interface AppData {
tools: EnhancedTool[];
workflows: Workflow[];
packs: ToolPack[];
categories: Category[];
loading: boolean;
error: string | null;
refetch: () => Promise<void>;
}
export function useAppData(): AppData {
const [tools, setTools] = useState<EnhancedTool[]>([]);
const [workflows, setWorkflows] = useState<Workflow[]>([]);
const [packs, setPacks] = useState<ToolPack[]>([]);
const [categories, setCategories] = useState<Category[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
const { isOnline, retryConnection } = useNetworkUtils();
const loadData = async () => {
try {
setLoading(true);
setError(null);
// Charger en parallèle avec cache
const [toolsData, workflowsData, packsData, categoriesData] = await Promise.all([
fetchWithCache('tools', () => toolsApi.list()),
fetchWithCache('workflows', () => workflowsApi.list()),
fetchWithCache('packs', () => packsApi.list()),
fetchWithCache('categories', () => categoriesApi.list())
]);
setTools(toolsData);
setWorkflows(workflowsData);
setPacks(packsData);
setCategories(categoriesData);
} catch (err) {
console.error('Failed to load app data:', err);
if (isOnline) {
const retrySuccess = await retryConnection(loadData);
if (!retrySuccess) {
setError('Impossible de charger les données. Veuillez rafraîchir la page.');
loadFallbackData();
}
} else {
setError('Pas de connexion internet');
}
} finally {
setLoading(false);
}
};
const loadFallbackData = () => {
const cachedTools = localStorage.getItem('fallback_tools');
if (cachedTools) {
setTools(JSON.parse(cachedTools));
}
};
useEffect(() => {
loadData();
}, []);
return {
tools,
workflows,
packs,
categories,
loading,
error,
refetch: loadData
};
}