export const convertWKTPointToLatLng = (wktString: string) => {
  if (
    !wktString ||
    typeof wktString !== "string" ||
    !wktString.startsWith("POINT")
  ) {
    return null;
  }

  const matched = wktString.match(/POINT\s*\(([-\d.]+)\s+([-\d.]+)\)/);
  if (!matched) return null;

  const lng = parseFloat(matched[1]);
  const lat = parseFloat(matched[2]);

  return [lng, lat]; // [longitude, latitude]
};
export const convertWKTLineStringToLatLngArray = (wktString: string) => {
  if (
    !wktString ||
    typeof wktString !== "string" ||
    !wktString.startsWith("LINESTRING")
  ) {
    return [];
  }

  const matched = wktString.match(/LINESTRING\s*\((.*)\)/);
  if (!matched) return [];

  const coordinates = matched[1].split(",").map((coordStr) => {
    const [x, y] = coordStr.trim().split(" ").map(Number);
    return [y, x]; // [lat, lng]
  });

  return coordinates;
};

export const convertWKTtoLatLngString = (wktString: string) => {
  if (!wktString || typeof wktString !== "string") return [];

  const clean = wktString.trim();

  // MULTIPOLYGON
  if (clean.startsWith("MULTIPOLYGON")) {
    const matched = clean.match(/MULTIPOLYGON\s*\(\(\((.*)\)\)\)/);
    if (!matched) return [];

    const polygons = matched[1].split(")),((").map((polygonStr) =>
      polygonStr
        .trim()
        .split(",")
        .map((coordStr) => {
          const [lng, lat] = coordStr.trim().split(/\s+/).map(Number);
          return [lat, lng]; // Đảo ngược: [latitude, longitude]
        })
    );

    return polygons; // Mỗi phần tử là 1 polygon (mảng các [lat, lng])
  }

  // POLYGON
  if (clean.startsWith("POLYGON")) {
    const matched = clean.match(/POLYGON\s*\(\((.*)\)\)/);
    if (!matched) return [];

    const polygon = matched[1].split(",").map((coordStr) => {
      const [lng, lat] = coordStr.trim().split(/\s+/).map(Number);
      return [lat, lng];
    });

    return [polygon];
  }

  return [];
};

export const getBanzoneNameByType = (type: number) => {
  switch (type) {
    case 1:
      return "Cấm đánh bắt";
    case 2:
      return "Cấm di chuyển";
    case 3:
      return "Vùng an toàn";
    default:
      return "Chưa có";
  }
};

export const convertToDMS = (value: number, isLat: boolean): string => {
  const deg = Math.floor(Math.abs(value));
  const minFloat = (Math.abs(value) - deg) * 60;
  const min = Math.floor(minFloat);
  const sec = (minFloat - min) * 60;

  const direction = value >= 0 ? (isLat ? "N" : "E") : isLat ? "S" : "W";

  return `${deg}°${min}'${sec.toFixed(2)}"${direction}`;
};


/**
 * Chuyển đổi tốc độ từ km/h sang knot (hải lý/giờ)
 * @param kmh - tốc độ tính bằng km/h
 * @returns tốc độ tính bằng knot
 */
export function kmhToKnot(kmh: number): number {
  const KNOT_PER_KMH = 1 / 1.852; // 1 knot = 1.852 km/h
  return parseFloat((kmh * KNOT_PER_KMH).toFixed(2)); // làm tròn 2 chữ số thập phân
}
