import { haversine, resolveCoords, type Coords } from '@/utils/geo'

export type Category = 'Baumaterial' | 'Werkzeug' | 'Holz & Platten' | 'Farben & Lacke' | 'Sanitär' | 'Elektro'

export interface Product {
  id: number; title: string; price: number
  providerId: number; icon: string; category: Category
  description: string; stock: number
}

export interface Provider {
  id: number; name: string; initials: string
  address: string; city: string; zip: string
  coords: Coords
  type: 'Fachhandel' | 'Baumarkt'
  since: number; verified: boolean
}

export const CATEGORIES: Category[] = [
  'Baumaterial', 'Werkzeug', 'Holz & Platten', 'Farben & Lacke', 'Sanitär', 'Elektro'
]

export const providers: Provider[] = [
  { id: 1, name: 'Baumarkt Müller',    initials: 'BM', address: 'Musterstraße 12',  city: 'Wuppertal', zip: '42103', coords: { lat: 51.2562, lng: 7.1508 }, type: 'Baumarkt',   since: 1998, verified: true  },
  { id: 2, name: 'Profi-Werkzeug GmbH',initials: 'PW', address: 'Industrieweg 5',   city: 'Wuppertal', zip: '42107', coords: { lat: 51.2637, lng: 7.1362 }, type: 'Fachhandel', since: 2005, verified: true  },
  { id: 3, name: 'Holzfachhandel Koch', initials: 'HK', address: 'Waldstraße 88',    city: 'Solingen',  zip: '42651', coords: { lat: 51.1800, lng: 7.0800 }, type: 'Fachhandel', since: 1987, verified: true  },
  { id: 4, name: 'Farbenwelt Lange',   initials: 'FL', address: 'Bergstraße 23',    city: 'Remscheid', zip: '42853', coords: { lat: 51.1800, lng: 7.1900 }, type: 'Fachhandel', since: 2001, verified: false },
]

export const products: Product[] = [
  { id: 1, title: 'Klinker-Restposten',    price: 89,    providerId: 1, icon: '🧱', category: 'Baumaterial',    description: 'Ca. 200 Stück verfügbar. Geeignet für Außenwände und Gartenmauern.', stock: 200 },
  { id: 2, title: 'Bohrmaschine 18V',      price: 64,    providerId: 2, icon: '⚙️', category: 'Werkzeug',       description: 'Akkubohrmaschine 18V, 2 Akkus, Ladegerät inkl. Leichte Gebrauchsspuren.', stock: 3 },
  { id: 3, title: 'Zaunlatten 180 cm',     price: 3.20,  providerId: 3, icon: '🪵', category: 'Holz & Platten', description: 'Kiefernholz, druckimprägniert. VB ab 50 Stück, Einzelabnahme möglich.', stock: 320 },
  { id: 4, title: 'Wandfarbe Weiß 10L',    price: 22,    providerId: 4, icon: '💧', category: 'Farben & Lacke', description: 'Dispersionsfarbe, innen. Restbestand aus Geschäftsauflösung. 12 Eimer.', stock: 12 },
  { id: 5, title: 'Betonmischer 140L',     price: 180,   providerId: 1, icon: '🏗️', category: 'Baumaterial',    description: 'Elektrischer Betonmischer 140L, 500W. Einwandfreier Zustand.', stock: 1 },
  { id: 6, title: 'Winkelschleifer 125mm', price: 35,    providerId: 2, icon: '🔧', category: 'Werkzeug',       description: '900W, inkl. 5 Trennscheiben. Gebraucht, technisch einwandfrei.', stock: 2 },
  { id: 7, title: 'OSB-Platten 18mm',      price: 14.50, providerId: 3, icon: '📦', category: 'Holz & Platten', description: '250x125cm, Zuschnitt möglich. Restposten aus Bauprojekt, 40 Platten.', stock: 40 },
  { id: 8, title: 'Badarmatur Chrom',      price: 45,    providerId: 1, icon: '🚿', category: 'Sanitär',        description: 'Einhebelmischer, neuwertig, originalverpackt. Ausstellungsstück.', stock: 4 },
  { id: 9, title: 'LED Feuchtraumleuchte', price: 18,    providerId: 2, icon: '💡', category: 'Elektro',        description: '60cm, 18W, IP65. Restposten, 20 Stück verfügbar.', stock: 20 },
]

/** Returns distance in km from a PLZ to a provider, or null if PLZ unknown */
export function distanceTo(fromPlz: string, provider: Provider): number | null {
  const origin = resolveCoords(fromPlz)
  if (!origin) return null
  return haversine(origin, provider.coords)
}

/** Enrich products with live distance from a given PLZ */
export function productsWithDistance(fromPlz: string) {
  return products.map(p => {
    const prov = providers.find(pr => pr.id === p.providerId)!
    const dist = distanceTo(fromPlz, prov)
    return { ...p, provider: prov.name, distance: dist !== null ? Math.round(dist * 10) / 10 : null }
  })
}
