import { useCallback } from 'react' import { gisApi, type VesselTrackResult } from '../../../api/gisApi' import { useTrackStore } from '../stores/trackStore' import type { TrackSegment } from '../../vessel-map' /** API 응답 → 내부 TrackSegment 변환 */ function toTrackSegment(r: VesselTrackResult): TrackSegment { return { vesselId: r.vesselId, nationalCode: r.nationalCode, shipKindCode: r.shipKindCode, shipName: r.shipName, geometry: r.geometry as [number, number][], // 백엔드가 문자열 배열로 전송 → 숫자 ms 변환 timestampsMs: r.timestamps.map((t) => { const n = Number(t) // 초 단위(10자리)면 ×1000, ms 단위(13자리)면 그대로 return n < 1e12 ? n * 1000 : n }), speeds: r.speeds, totalDistance: r.totalDistance, avgSpeed: r.avgSpeed, maxSpeed: r.maxSpeed, pointCount: r.pointCount, } } /** 선박 항적 조회 훅 */ export function useVesselTracks() { const setTracks = useTrackStore((s) => s.setTracks) const setLoading = useTrackStore((s) => s.setLoading) const clearTracks = useTrackStore((s) => s.clearTracks) const fetchTracks = useCallback( async (mmsiList: string[], startTime: string, endTime: string) => { setLoading(true) try { const data = await gisApi.getVesselTracks(mmsiList, startTime, endTime) const segments = data.map(toTrackSegment) setTracks(segments) } catch (err) { console.error('[useVesselTracks] fetch failed:', err) clearTracks() } finally { setLoading(false) } }, [setTracks, setLoading, clearTracks], ) return { fetchTracks, clearTracks } }