import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  static targets = [ "caption", "image", "dialog", "zoomedImage" ]

  connect() {
    this.dialogTarget.addEventListener('transitionend', this.handleTransitionEnd.bind(this))
  }

  disconnect() {
    this.dialogTarget.removeEventListener('transitionend', this.handleTransitionEnd.bind(this))
  }

  open(event) {
    this.dialogTarget.showModal()
    this.#set(event.target.closest("a"))
  }

  // Wait for the transition to finish before resetting the image
  handleTransitionEnd(event) {
    if (event.target === this.dialogTarget && !this.dialogTarget.open) {
      this.reset()
    }
  }

  reset() {
    this.zoomedImageTarget.src = ""
    this.captionTarget.innerText = ""
    this.dispatch('closed')
  }

  #set(target) {
    const imageSrc = target.href
    const caption = target.dataset.lightboxCaptionValue

    this.zoomedImageTarget.src = imageSrc

    if (caption) {
      this.captionTarget.innerText = caption
    }
  }
}
