import { useState, useMemo, memo, useCallback } from 'react' import { BarChart3 } from 'lucide-react' import { LineChart, Panel } from '@/components/Charts' import { TimeRangeSelector } from './TimeRangeSelector' import { DataGap, detectDataGaps, normalizeTelemetryData } from '@/features/daily-report/utils' import { TelemetryDto } from '@/lib/api' import { EmptyState } from '@/components/common' import { useTelemetryCharts } from '@/features/daily-report/hooks/useTelemetryCharts' type ChartsTabProps = { sortedTelemetry: TelemetryDto[] dataGaps?: DataGap[] } export const ChartsTab = memo(function ChartsTab({ sortedTelemetry, dataGaps = [], }: ChartsTabProps) { const [chartStartMinute, setChartStartMinute] = useState(0) const [chartEndMinute, setChartEndMinute] = useState(1439) const handleStartMinuteChange = useCallback((minute: number) => { setChartStartMinute(minute) }, []) const handleEndMinuteChange = useCallback((minute: number) => { setChartEndMinute(minute) }, []) // Normalize telemetry data const normalizedTelemetry = useMemo( () => normalizeTelemetryData(sortedTelemetry), [sortedTelemetry] ) // Filter by time range const filteredTelemetry = useMemo(() => { return normalizedTelemetry.filter( t => t.minute >= chartStartMinute && t.minute <= chartEndMinute ) }, [normalizedTelemetry, chartStartMinute, chartEndMinute]) // Detect data gaps in filtered data const timestamps = useMemo( () => filteredTelemetry.map(t => t.timestamp), [filteredTelemetry] ) const filteredDataGaps = useMemo( () => detectDataGaps(timestamps, 30), [timestamps] ) // Build charts using custom hook const { charts, chartLabels } = useTelemetryCharts({ filteredTelemetry, filteredDataGaps, }) return (