export interface Coords { lat: number; lng: number }

// Haversine distance in km
export function haversine(a: Coords, b: Coords): number {
  const R = 6371
  const dLat = (b.lat - a.lat) * Math.PI / 180
  const dLng = (b.lng - a.lng) * Math.PI / 180
  const sin2 = Math.sin(dLat/2)**2 + Math.cos(a.lat*Math.PI/180) * Math.cos(b.lat*Math.PI/180) * Math.sin(dLng/2)**2
  return R * 2 * Math.asin(Math.sqrt(sin2))
}

// PLZ → Coords lookup (NRW-Raum)
export const PLZ_COORDS: Record<string, Coords> = {
  '42103': { lat: 51.2562, lng: 7.1508 },  // Wuppertal-Mitte
  '42107': { lat: 51.2637, lng: 7.1362 },  // Wuppertal-Elberfeld
  '42119': { lat: 51.2700, lng: 7.1800 },  // Wuppertal-Barmen
  '42277': { lat: 51.2800, lng: 7.2100 },  // Wuppertal-Oberbarmen
  '42651': { lat: 51.1800, lng: 7.0800 },  // Solingen
  '42853': { lat: 51.1800, lng: 7.1900 },  // Remscheid
  '40210': { lat: 51.2217, lng: 6.7762 },  // Düsseldorf
  '44135': { lat: 51.5139, lng: 7.4653 },  // Dortmund
  '45127': { lat: 51.4556, lng: 7.0116 },  // Essen
  '47051': { lat: 51.4344, lng: 6.7623 },  // Duisburg
  '50667': { lat: 50.9333, lng: 6.9500 },  // Köln
}

export function resolveCoords(plz: string): Coords | null {
  return PLZ_COORDS[plz.trim()] ?? null
}
