import 'dart:math';

const double _earthRadiusKm = 6371;

/// Distância em linha reta (km) entre duas coordenadas, pela fórmula de
/// Haversine — suficiente para ordenar/agrupar consultórios por
/// proximidade, sem precisar de nenhum pacote de mapas.
double haversineDistanceKm(double lat1, double lon1, double lat2, double lon2) {
  final dLat = _toRadians(lat2 - lat1);
  final dLon = _toRadians(lon2 - lon1);
  final a = sin(dLat / 2) * sin(dLat / 2) +
      cos(_toRadians(lat1)) *
          cos(_toRadians(lat2)) *
          sin(dLon / 2) *
          sin(dLon / 2);
  final c = 2 * atan2(sqrt(a), sqrt(1 - a));
  return _earthRadiusKm * c;
}

double _toRadians(double degrees) => degrees * pi / 180;
