import { useEffect } from 'react'
import { useNavigate } from '@tanstack/react-router'
import { useAuthStore } from './store'

/** Редиректит на /login, если пользователь не вошёл (после завершения bootstrap-попытки refresh). */
export function useRequireAuth() {
  const { user, isBootstrapping } = useAuthStore()
  const navigate = useNavigate()

  useEffect(() => {
    if (!isBootstrapping && !user) void navigate({ to: '/login' })
  }, [isBootstrapping, user, navigate])

  return { user, isReady: !isBootstrapping && !!user }
}

/** Редиректит уже вошедшего пользователя с login/register на дашборд. */
export function useRequireGuest() {
  const { user, isBootstrapping } = useAuthStore()
  const navigate = useNavigate()

  useEffect(() => {
    if (!isBootstrapping && user) void navigate({ to: '/dashboard' })
  }, [isBootstrapping, user, navigate])
}

/** Как useRequireAuth, но дополнительно требует роль admin — иначе редирект на дашборд. */
export function useRequireAdmin() {
  const { user, isBootstrapping } = useAuthStore()
  const navigate = useNavigate()

  useEffect(() => {
    if (isBootstrapping) return
    if (!user) void navigate({ to: '/login' })
    else if (user.role !== 'admin') void navigate({ to: '/dashboard' })
  }, [isBootstrapping, user, navigate])

  return { user, isReady: !isBootstrapping && !!user && user.role === 'admin' }
}
