import type { SegmentLabel, ZoneRule } from '../types/timeline';
import { TRACK_END_PX, TRACK_START_PX } from './route';
import {
  BRIDGE_PASSED_AT_PX,
  INACTIVE_BOW_CENTER_PX,
  SINDAE_BRIDGE_CENTER_PX,
  TERMINAL_MARKERS,
  TUNNEL_PASSED_AT_PX,
} from './segments';

/** 터미널 원 중앙 x좌표 — 존 점선이 원 중앙에 걸리도록 파생. */
function terminalCenter(id: string): number {
  const marker = TERMINAL_MARKERS.find((m) => m.id === id);
  if (!marker) throw new Error(`Unknown terminal marker: ${id}`);
  return marker.left + marker.width / 2;
}

/** Section / structure names below the track. */
export const SEGMENT_LABELS: SegmentLabel[] = [
  // 텍스트 센터를 트랙 시작점에 맞춤 (중앙 정렬)
  { text: '회덕', left: TRACK_START_PX, color: 'fixed-accent' },
  {
    text: '신대천과선교',
    left: (SINDAE_BRIDGE_CENTER_PX + INACTIVE_BOW_CENTER_PX) / 2,
    color: { dynamic: BRIDGE_PASSED_AT_PX },
  },
  { text: '회덕터널(하)', left: 622, color: { dynamic: TUNNEL_PASSED_AT_PX } },
  {
    text: '대전조차장',
    left: 1358,
    color: { dynamic: terminalCenter('terminal-02') },
  },
  {
    // 텍스트 센터를 트랙 끝점에 맞춤 (중앙 정렬)
    text: '대전조차장',
    left: TRACK_END_PX,
    color: 'fixed-accent',
  },
];

/**
 * Dashed zone connectors under the track. 첫/끝 앵커 = 박스 양 끝,
 * 중간 앵커 = 세로 점선만 내려와 아이콘들이 한 줄로 연결돼 보인다.
 */
export const LABEL_ZONES: ZoneRule[] = [
  { anchors: [SINDAE_BRIDGE_CENTER_PX, INACTIVE_BOW_CENTER_PX] },
  {
    anchors: [
      terminalCenter('terminal-02'),
      terminalCenter('terminal-03'),
      terminalCenter('terminal-04'),
      terminalCenter('terminal-05'),
      terminalCenter('terminal-06'),
    ],
  },
];
