'use client'; import { useState, useCallback } from 'react'; import type { Marker, CreateMarkerInput } from '@/types/marker'; export function useMarkers() { const [markers, setMarkers] = useState([]); const addMarker = useCallback((input: CreateMarkerInput): Marker => { const marker: Marker = { ...input, id: `marker-${Date.now()}-${Math.random()}`, }; setMarkers((prev) => [...prev, marker].sort((a, b) => a.time - b.time)); return marker; }, []); const updateMarker = useCallback((id: string, updates: Partial) => { setMarkers((prev) => { const updated = prev.map((m) => m.id === id ? { ...m, ...updates } : m ); // Re-sort if time changed if ('time' in updates) { return updated.sort((a, b) => a.time - b.time); } return updated; }); }, []); const removeMarker = useCallback((id: string) => { setMarkers((prev) => prev.filter((m) => m.id !== id)); }, []); const clearMarkers = useCallback(() => { setMarkers([]); }, []); const getMarkerAt = useCallback((time: number, tolerance: number = 0.1): Marker | undefined => { return markers.find((m) => { if (m.type === 'point') { return Math.abs(m.time - time) <= tolerance; } else { // For regions, check if time is within the region return m.endTime !== undefined && time >= m.time && time <= m.endTime; } }); }, [markers]); const getNextMarker = useCallback((time: number): Marker | undefined => { return markers.find((m) => m.time > time); }, [markers]); const getPreviousMarker = useCallback((time: number): Marker | undefined => { const previous = markers.filter((m) => m.time < time); return previous[previous.length - 1]; }, [markers]); return { markers, addMarker, updateMarker, removeMarker, clearMarkers, getMarkerAt, getNextMarker, getPreviousMarker, setMarkers, }; }