import type { TguPlanStatus } from "../../../model/tguTypes";

export type GeoPoint = {
  lon: number;
  lat: number;
};

export type ScreenPoint = {
  x: number;
  y: number;
};

export type MapSize = {
  width: number;
  height: number;
};

export type MapViewState = {
  centerLon: number;
  centerLat: number;
  zoom: number;
};

export type MapPolygon = {
  id: string;
  name: string;
  kind: "planWork" | "swath" | "trackZone" | "request" | "complexPlan" | "heatmap";
  layer: "planWorks" | "swath" | "tracks" | "requests" | "complexPlan" | "heatmap";
  points: GeoPoint[];
  status?: TguPlanStatus;
  planId?: string;
  spacecraftId?: string;
  requestId?: string;
  surveyType?: string;
  /** id режима плана (survey), к которому относится контур — для связи «включение ↔ объект на карте». */
  modeId?: number;
  /** Номер витка (layer "swath") — для карточки полосы обзора. */
  revolution?: number;
  /** Важность ячейки тепловой карты (layer "heatmap"): задаёт цвет заливки и показывается в инспекторе. */
  importance?: number;
  /** Номер ячейки сетки заданий (layer "heatmap") — ключ для поиска полной карточки ячейки. */
  cellNum?: number;
  /** false — контур рисуется, но исключён из hit-теста/выбора (напр. контур заявки на вкладке «Слоты»). */
  pickable?: boolean;
  zIndex: number;
};

export type MapLine = {
  id: string;
  /** Человекочитаемое имя (для подсказок и выбора объекта под курсором), напр. «Сброс · виток N». */
  name?: string;
  layer: "tracks";
  points: GeoPoint[];
  spacecraftId?: string;
  passIndex?: number;
  zIndex: number;
  /** Вид линии: трасса КА (по умолчанию) или сеанс сброса — яркая толстая линия на трассе. */
  kind?: "track" | "drop";
  /** id режима плана (survey/drop), к которому относится объект — для связи «включение ↔ объект на карте». */
  modeId?: number;
};

export type MapMarker = {
  id: string;
  layer: "stations" | "spacecraftMarkers";
  point: GeoPoint;
  label: string;
  zIndex: number;
  stationNumber?: number;
  altitude?: number;
  elevationMin?: number;
  elevationMax?: number;
};

export type Tgu2DMapScene = {
  polygons: MapPolygon[];
  lines: MapLine[];
  markers: MapMarker[];
  /**
   * Кольца следа покрытия (вкладка «Слоты») — рисуются отдельным пассом drawCoverage заливкой,
   * НЕ как MapPolygon: вне polygons/spatialIndex, поэтому не участвуют в hit-тесте/z-порядке.
   * Пусто/не задано — слой не рисуется (тумблер выключен либо нечего показывать).
   */
  coverageRings?: GeoPoint[][];
};

