import { Controller } from "@hotwired/stimulus"

// Atualiza o painel automaticamente, sem o usuário precisar apertar F5.
//
// A cada `interval` ms faz um Turbo.visit "replace" na própria URL: o Turbo
// re-renderiza o corpo (KPIs, gráficos, mapa) e re-executa os <script> inline,
// preservando os filtros — que vivem na query string. Pausa quando a aba está
// oculta ou quando o usuário está com um campo em foco, e restaura a posição de
// rolagem após cada atualização (para não "pular" para o topo).
//
// Uso:
//   <div data-controller="auto-refresh"
//        data-auto-refresh-interval-value="300000"> ... </div>
export default class extends Controller {
  static values = { interval: { type: Number, default: 300000 } } // 5 min

  connect() {
    // Restaura a rolagem salva antes da última atualização automática.
    const y = sessionStorage.getItem("autoRefreshScroll")
    if (y !== null) {
      window.scrollTo(0, parseInt(y, 10))
      sessionStorage.removeItem("autoRefreshScroll")
    }
    this.timer = setInterval(() => this.refresh(), this.intervalValue)
  }

  disconnect() {
    clearInterval(this.timer)
  }

  refresh() {
    // Não recarrega em aba oculta (economiza recursos) nem se o usuário estiver
    // digitando/selecionando algo (evita perder o que está fazendo).
    if (document.visibilityState !== "visible") return
    const ativo = document.activeElement
    if (ativo && ["INPUT", "SELECT", "TEXTAREA"].includes(ativo.tagName)) return

    sessionStorage.setItem("autoRefreshScroll", String(window.scrollY))
    if (window.Turbo) {
      window.Turbo.visit(window.location.href, { action: "replace" })
    } else {
      window.location.reload()
    }
  }
}
