import { useState, useCallback } from 'react'; import { fetchDashboardData } from '../../utils/api.js'; import { MonitorState, LogEntry } from './types.js'; import { makeLog } from './factory.js'; export function useFetchData( addLog: (level: LogEntry['level'], msg: string) => void, setState: React.Dispatch> ) { return useCallback(async () => { try { const data = await fetchDashboardData(); const completed = data.roadmap.filter(t => t.status === 'COMPLETED').length; const active = data.roadmap.filter(t => t.status === 'ACTIVE' || t.status === 'IN_PROGRESS').length; const blocked = data.roadmap.filter(t => (t as any).is_blocked).length; const newLogs = data.daemonLogs.slice(-5).map(l => makeLog('frank', l)); setState(prev => ({ ...prev, apiUrl: data.apiUrl, activeTask: data.activeTask, daemonOnline: data.daemonStatus, roadmap: data.roadmap, stats: { total: data.roadmap.length, completed, active, blocked }, hiveStats: data.hiveStats, nexusAlerts: data.nexusAlerts, systemInsights: data.systemInsights, loading: false, logs: newLogs.length > 0 ? [...prev.logs.slice(-20), ...newLogs] : prev.logs, })); } catch (e: any) { addLog('error', `Sync failed: ${e.message}`); } }, [addLog, setState]); }