/**
 * Parses "lat, lng" or "lat, lng, radius" strings into numbers.
 */
export function parseGeoInput(input: string): { lat: number, lng: number, radius?: number } | null {
  if (!input) return null;
  
  // Clean up potential labels like "lat:", "lng:", etc.
  const clean = input.replace(/(lat|lng|latitude|longitude|radius|rad|r)[:\s]*/gi, '').trim();
  
  // Support both comma and space separators
  // Regex matches: -90 to 90 for lat, -180 to 180 for lng, and optional positive radius
  const match = clean.match(/^(-?\d+\.?\d*)\s*[,|\s]\s*(-?\d+\.?\d*)(?:\s*[,|\s]\s*(\d+\.?\d*))?$/);
  
  if (match) {
    const lat = parseFloat(match[1]);
    const lng = parseFloat(match[2]);
    
    // Quick validation range check
    if (lat < -90 || lat > 90 || lng < -180 || lng > 180) return null;

    return {
      lat,
      lng,
      radius: match[3] ? parseFloat(match[3]) : undefined
    };
  }
  return null;
}

/**
 * Calculates a bounding box from a point and radius.
 * 1 degree latitude is approx 111km.
 */
export function getBBoxFromPoint(lat: number, lng: number, radiusInMeters: number) {
  const latOffset = (radiusInMeters / 1000) / 111;
  const lngOffset = (radiusInMeters / 1000) / (111 * Math.cos(lat * Math.PI / 180));
  
  return {
    south: lat - latOffset,
    north: lat + latOffset,
    west: lng - lngOffset,
    east: lng + lngOffset
  };
}
