import { useCallback, useEffect, useMemo, useState } from 'react'; import { getHourlyPlantStats, getPlantStats } from '../services/solarApi'; import { formatHourlyChartData, formatPeriodChartData, toLocalIsoDate, } from '../utils/statsChart'; const buildPeriodParams = (period, selectedDate) => { const year = selectedDate.getFullYear(); const month = selectedDate.getMonth() + 1; if (period === 'day') return { period, year, month }; return { period, year }; }; const formatUpdatedAt = (value) => { if (!value) return '-'; const date = new Date(value); if (Number.isNaN(date.getTime())) return '-'; return date.toLocaleTimeString('ko-KR', { hour: '2-digit', minute: '2-digit' }); }; export default function usePlantStats(plant, period, selectedDate) { const [chartData, setChartData] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const reload = useCallback(async () => { try { setLoading(true); setError(null); if (period === 'today') { const result = await getHourlyPlantStats(plant.id, toLocalIsoDate(selectedDate)); setChartData(formatHourlyChartData(result?.data || [], selectedDate)); } else { const result = await getPlantStats( plant.id, buildPeriodParams(period, selectedDate), ); setChartData(formatPeriodChartData(period, result?.data || [], selectedDate)); } } catch (requestError) { setError(requestError.message); setChartData([]); } finally { setLoading(false); } }, [period, plant.id, selectedDate]); useEffect(() => { reload(); }, [reload]); const todayData = useMemo(() => { if (period !== 'today' || toLocalIsoDate(selectedDate) !== toLocalIsoDate(new Date())) { return null; } const latestLog = plant.latest_log; if (!latestLog) return null; return { currentKw: Number(latestLog.current_kw) || 0, todayKwh: Number(latestLog.today_kwh) || 0, updatedAt: formatUpdatedAt(latestLog.created_at), }; }, [period, plant.latest_log, selectedDate]); return { chartData, loading, error, reload, todayData }; }