import { useState, useEffect } from "react"
import HandleNavigate from "../utils/HandleNavigate/HandleNavigate"

export function requireAuthSync({ key = "username", redirectTo = "/login", replace = true } = {}) {
  const value = localStorage.getItem(key)
  if (!value) {
    if (replace) window.location.replace(redirectTo)
    else window.location.assign(redirectTo)
    return false
  }
  return true
}

// New: non-redirecting check for auth status
export function isAuthenticated(key = "username") {
  try {
    return !!localStorage.getItem(key)
  } catch {
    return false
  }
}

// Default hook: ad vissza egy [value, setValue] párt, szinkronizálja localStorage-t és opcionálisan átirányít, ha nincs érték
export default function useRequireAuth({ key = "username", redirectTo = "/login", redirect = true } = {}) {
  const { goTo } = HandleNavigate()
  const [value, setValue] = useState(() => {
    try {
      return localStorage.getItem(key)
    } catch {
      return null
    }
  })

  // Ha nincs érték és redirect engedélyezve van, átirányítjuk (komponens mount-oláskor)
  useEffect(() => {
    if (!value && redirect) {
      goTo(redirectTo)
    }
  }, [goTo, value, redirectTo, redirect])

  // Szinkronizáljuk a localStorage-t amikor a state változik
  useEffect(() => {
    try {
      if (value == null) localStorage.removeItem(key)
      else localStorage.setItem(key, value)
    } catch {
      // fail silently
    }
  }, [key, value])

  return [value, setValue]
}
