import { createFileRoute, redirect, useNavigate } from '@tanstack/react-router'
import { useEffect } from 'react'
import { useAuth } from 'react-oidc-context'

export const Route = createFileRoute('/')({
  beforeLoad: ({ location }) => {
    // OIDC callback guard: когда Keycloak возвращает на `/?code=...&state=...`,
    // AuthProvider (oidc-client-ts) обрабатывает params в useEffect и затем
    // вызывает `onSigninCallback` который стрипает их через history.replaceState.
    // Если router сразу redirect'нет на /dictionaries — code/state пропадут до
    // того как AuthProvider их обработает → token exchange fail, user остаётся
    // anonymous. Поэтому skip redirect когда есть ?code= в URL — компонент
    // ниже сам redirect'нет после auth complete.
    const raw = location.search as Record<string, unknown>
    if (raw && typeof raw.code === 'string') {
      return
    }
    throw redirect({ to: '/dictionaries' })
  },
  component: HomeIndex,
})

/**
 * Renders only during OIDC callback (`/?code=...&state=...` от Keycloak).
 * Waits for auth.isLoading=false → onSigninCallback вызвался → URL stripped
 * → navigate to /dictionaries.
 */
function HomeIndex() {
  const auth = useAuth()
  const navigate = useNavigate()
  useEffect(() => {
    if (!auth.isLoading) {
      void navigate({ to: '/dictionaries', replace: true })
    }
  }, [auth.isLoading, navigate])
  return null
}
