/**
 * Ambient type declarations for leaflet.heat (no @types package available).
 *
 * This file must be a MODULE (has a top-level export) so that `declare module 'leaflet'`
 * is treated as an AUGMENTATION of the existing leaflet types, not a replacement.
 * Without the export, the `declare module 'leaflet'` block would shadow all of @types/leaflet.
 */

// This empty export makes the file a module, enabling proper augmentation semantics.
export {}

// Augment the 'leaflet' module to add heatLayer and HeatLayer types.
declare module 'leaflet' {
  type HeatLatLngTuple = [number, number] | [number, number, number]

  interface HeatLayerOptions {
    minOpacity?: number
    maxZoom?: number
    max?: number
    radius?: number
    blur?: number
    gradient?: Record<number, string>
  }

  class HeatLayer extends Layer {
    setLatLngs(latlngs: HeatLatLngTuple[]): this
    addLatLng(latlng: HeatLatLngTuple): this
    setOptions(options: HeatLayerOptions): this
    redraw(): this
  }

  function heatLayer(latlngs: HeatLatLngTuple[], options?: HeatLayerOptions): HeatLayer
}

// Declare leaflet.heat as a side-effect-only module.
declare module 'leaflet.heat' {
  // Side-effect: augments the Leaflet global with the heatLayer plugin.
  const _: undefined
  export default _
}
