import { useState, useCallback } from 'react'; interface Props { isPlaying: boolean; speed: number; startTime: number; endTime: number; onPlay: () => void; onPause: () => void; onReset: () => void; onSpeedChange: (speed: number) => void; onRangeChange: (start: number, end: number) => void; } const SPEEDS = [1, 2, 4, 8, 16]; // Preset ranges relative to T0 (main strike moment) const T0 = new Date('2026-03-01T12:01:00Z').getTime(); const HOUR = 3600_000; const PRESETS = [ { label: '24H', start: T0 - 12 * HOUR, end: T0 + 12 * HOUR }, { label: '12H', start: T0 - 6 * HOUR, end: T0 + 6 * HOUR }, { label: '6H', start: T0 - 3 * HOUR, end: T0 + 3 * HOUR }, { label: '2H', start: T0 - HOUR, end: T0 + HOUR }, { label: '30M', start: T0 - 15 * 60_000, end: T0 + 15 * 60_000 }, ]; const KST_OFFSET = 9 * 3600_000; // KST = UTC+9 function toKSTInput(ts: number): string { // Format as datetime-local value in KST: YYYY-MM-DDTHH:MM const d = new Date(ts + KST_OFFSET); const pad = (n: number) => n.toString().padStart(2, '0'); return `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())}T${pad(d.getUTCHours())}:${pad(d.getUTCMinutes())}`; } function fromKSTInput(val: string): number { // Parse datetime-local as KST → convert to UTC return new Date(val + 'Z').getTime() - KST_OFFSET; } export function ReplayControls({ isPlaying, speed, startTime, endTime, onPlay, onPause, onReset, onSpeedChange, onRangeChange, }: Props) { const [showPicker, setShowPicker] = useState(false); const [customStart, setCustomStart] = useState(toKSTInput(startTime)); const [customEnd, setCustomEnd] = useState(toKSTInput(endTime)); const handlePreset = useCallback((preset: typeof PRESETS[number]) => { onRangeChange(preset.start, preset.end); setCustomStart(toKSTInput(preset.start)); setCustomEnd(toKSTInput(preset.end)); }, [onRangeChange]); const handleCustomApply = useCallback(() => { const s = fromKSTInput(customStart); const e = fromKSTInput(customEnd); if (s < e) { onRangeChange(s, e); setShowPicker(false); } }, [customStart, customEnd, onRangeChange]); // Find which preset is active const activePreset = PRESETS.find(p => p.start === startTime && p.end === endTime); return (