import { ZONE_META } from "../../entities/zone/model/meta"; import { SPEED_MAX, VESSEL_TYPES } from "../../entities/vessel/model/meta"; import type { DerivedLegacyVessel } from "../../features/legacyDashboard/model/types"; import { haversineNm } from "../../shared/lib/geo/haversineNm"; import { OVERLAY_RGB, rgbToHex } from "../../shared/lib/map/palette"; type Props = { vessel: DerivedLegacyVessel; allVessels: DerivedLegacyVessel[]; onClose: () => void; onSelectMmsi?: (mmsi: number) => void; }; export function VesselInfoPanel({ vessel: v, allVessels, onClose, onSelectMmsi }: Props) { const t = VESSEL_TYPES[v.shipCode]; const ownerLabel = v.ownerCn || v.ownerRoman || v.ownerKey || "-"; const primary = t.speedProfile.filter((s) => s.primary); const inRange = v.sog !== null && primary.length ? primary.some((s) => v.sog! >= s.range[0] && v.sog! <= s.range[1]) : false; const pair = v.pairPermitNo ? allVessels.find((v2) => v2.permitNo === v.pairPermitNo) ?? null : null; const pairDist = pair ? haversineNm(v.lat, v.lon, pair.lat, pair.lon) : null; const month = new Date().getMonth(); const zone = v.zoneId ? ZONE_META[v.zoneId] : null; const allowed = v.zoneId ? t.allowedZones.includes(v.zoneId) : null; return (