import type { GeoPoint } from "../tgu-map-2d/model/mapTypes";

/**
 * Преобразует набор вершин полигона в WKT POLYGON.
 * Порядок координат WKT — "lon lat". Кольцо замыкается первой вершиной,
 * если оно ещё не замкнуто. Требуется минимум 3 вершины.
 */
export function polygonToWkt(points: GeoPoint[]): string {
  if (points.length < 3) {
    throw new Error("Полигон должен содержать минимум 3 вершины.");
  }

  const ring = [...points];
  const first = ring[0];
  const last = ring[ring.length - 1];
  if (first.lon !== last.lon || first.lat !== last.lat) {
    ring.push(first);
  }

  const coords = ring.map((p) => `${formatCoord(p.lon)} ${formatCoord(p.lat)}`).join(", ");
  return `POLYGON((${coords}))`;
}

function formatCoord(value: number): string {
  // ограничиваем разрядность, убираем хвостовые нули
  return Number(value.toFixed(6)).toString();
}
