<script lang="ts">
  /**
   * The OverlayToggle shows a single toggle to enable or disable an overlay
   */
  import Checkbox from "../Base/Checkbox.svelte"
  import { onDestroy } from "svelte"
  import { UIEventSource } from "../../Logic/UIEventSource"
  import Tr from "../Base/Tr.svelte"
  import Translations from "../i18n/Translations"
  import { Translation } from "../i18n/Translation"
  import type { RasterLayerProperties } from "../../Models/RasterLayerProperties"

  export let layerproperties: RasterLayerProperties
  export let state: { isDisplayed: UIEventSource<boolean> }
  export let zoomlevel: UIEventSource<number>
  export let highlightedLayer: UIEventSource<string> | undefined

  let isDisplayed: boolean = state.isDisplayed.data
  onDestroy(
    state.isDisplayed.addCallbackAndRunD((d) => {
      isDisplayed = d
      return false
    })
  )

  let mainElem: HTMLElement
  $: onDestroy(
    highlightedLayer.addCallbackAndRun((highlightedLayer) => {
      if (highlightedLayer === layerproperties.id) {
        mainElem?.classList?.add("glowing-shadow")
      } else {
        mainElem?.classList?.remove("glowing-shadow")
      }
    })
  )
</script>

{#if layerproperties.name}
  <div bind:this={mainElem}>
    <label class="flex gap-1">
      <Checkbox selected={state.isDisplayed} />
      <Tr t={new Translation(layerproperties.name)} />
      {#if $zoomlevel < layerproperties.min_zoom}
        <span class="alert">
          <Tr t={Translations.t.general.layerSelection.zoomInToSeeThisLayer} />
        </span>
      {/if}
    </label>
  </div>
{/if}