export function CalculateDistance(
  point1: { latitude: number; longitude: number },
  point2: { latitude: number; longitude: number }
): number {
  // 验证输入数据
  if (!point1 || !point2) {
    console.error('坐标点不能为空')
    return 0
  }
  console.log('point1', point1)
  console.log('point2', point2)
  const lat1 = Number(point1.latitude)
  const lng1 = Number(point1.longitude)
  const lat2 = Number(point2.latitude)
  const lng2 = Number(point2.longitude)

  // 验证坐标值是否有效
  if (
    isNaN(lat1) ||
    isNaN(lng1) ||
    isNaN(lat2) ||
    isNaN(lng2) ||
    lat1 < -90 ||
    lat1 > 90 ||
    lat2 < -90 ||
    lat2 > 90 ||
    lng1 < -180 ||
    lng1 > 180 ||
    lng2 < -180 ||
    lng2 > 180
  ) {
    console.error('无效的坐标值', { lat1, lng1, lat2, lng2 })
    return 0
  }

  // 如果是同一个点，直接返回0
  if (lat1 === lat2 && lng1 === lng2) {
    return 0
  }

  // 地球半径 - WGS84标准椭球体平均半径
  const R = 6371008.7714 // 更精确的地球平均半径（米）

  // 角度转弧度
  const toRadians = (degree: number): number => degree * (Math.PI / 180)

  const φ1 = toRadians(lat1)
  const φ2 = toRadians(lat2)
  const Δφ = toRadians(lat2 - lat1)
  const Δλ = toRadians(lng2 - lng1)

  // 使用更稳定的Haversine公式实现
  const sinHalfΔφ = Math.sin(Δφ / 2)
  const sinHalfΔλ = Math.sin(Δλ / 2)

  const a = sinHalfΔφ * sinHalfΔφ + Math.cos(φ1) * Math.cos(φ2) * sinHalfΔλ * sinHalfΔλ

  // 防止浮点数精度问题导致a大于1
  const aClamped = Math.min(Math.max(a, 0), 1)

  const c = 2 * Math.atan2(Math.sqrt(aClamped), Math.sqrt(1 - aClamped))

  // 计算距离
  const distance = R * c
  let s = Math.round(distance * 100) / 100
  console.log('distancew误差', s)
  // 返回保留两位小数的结果（如果需要整数，可以使用Math.round）
  return s
}
