import { ZoneData } from '@/pages/Slave/SGW/Map/type';

export const convertWKTPointToLatLng = (
  wktString: string,
): [number, number] | null => {
  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 [x, y]; // [lng, lat]
  });

  return coordinates;
};

export const convertWKTtoLatLngString = (wktString: string) => {
  if (
    !wktString ||
    typeof wktString !== 'string' ||
    !wktString.startsWith('MULTIPOLYGON')
  ) {
    return [];
  }

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

  const polygons = matched[1]
    .split(')),((') // chia các polygon
    .map((polygonStr) =>
      polygonStr
        .trim()
        .split(',')
        .map((coordStr) => {
          const [x, y] = coordStr.trim().split(' ').map(Number);
          return [x, y];
        }),
    );

  return polygons;
};

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ó';
  }
};

const PI = 3.1416;
/**
 * Hàm tính bán kính từ diện tích (hecta) để hiển thị trên bản đồ
 * @param areaInHa - Diện tích tính bằng hecta
 * @returns Bán kính tính bằng mét
 */
export const getCircleRadius = (areaInHa: number) => {
  const areaInSquareMeters = areaInHa * 10000;
  const radius = Math.sqrt(areaInSquareMeters / PI);
  return Math.round(radius); // Trả về số nguyên (mét)
};
/**
 * Hàm tính diện tích (hecta) từ bán kính (mét)
 * @param radiusInMeters - Bán kính tính bằng mét
 * @returns Diện tích tính bằng hecta (ha), làm tròn số nguyên
 */
export const getAreaFromRadius = (radiusInMeters: number) => {
  const areaInSquareMeters = PI * Math.pow(radiusInMeters, 2);
  const areaInHa = areaInSquareMeters / 10000;
  return Math.round(areaInHa); // Trả về số nguyên (ha)
};

export const getAlarmTypeName = (type: number): ZoneData['type'] => {
  switch (type) {
    case 1:
      return 'warning';
    case 2:
      return 'alarm';
    default:
      return 'default';
  }
};
