import { useEffect, useRef } from 'react'
import { useNavigate } from 'react-router-dom'
import { useMe } from '@/lib/useMe'
import { getOrgOverride } from '@/lib/api'

/** Защита tenant-роутов на двух уровнях:
 *  - SuperAdmin без активного override → /super-admin/organizations.
 *  - Не-SuperAdmin без живой org или без активного Employee → /no-organization.
 *    Это срабатывает для orphan AppUser (его org удалили или его Employee
 *    деактивировали) — иначе он бы видел AppLayout с пустым сайдбаром
 *    или 403-ошибкой на каждом запросе.
 *
 * Защита от race: между window.location.assign('/dashboard') и тем моментом
 * когда сюда докатилось me.data — localStorage уже точно установлен.
 * Повторная проверка через rAF страхует от гонок инициализации. */
export function TenantRouteGuard({ children }: { children: React.ReactNode }) {
  const me = useMe()
  const navigate = useNavigate()
  const checkedOnceRef = useRef(false)
  useEffect(() => {
    if (!me.data) return
    const isSuper = me.data.roles?.includes('SuperAdmin')
    if (isSuper) {
      // Re-read через rAF чтобы перебить любые гонки с инициализацией localStorage.
      requestAnimationFrame(() => {
        const ov = getOrgOverride()
        if (!ov) {
          if (checkedOnceRef.current) return
          checkedOnceRef.current = true
          // eslint-disable-next-line no-console
          console.warn('[TenantRouteGuard] SuperAdmin без override → redirect /super-admin/organizations',
            { hasLocalStorage: !!localStorage.getItem('superAdminAsOrg') })
          navigate('/super-admin/organizations', { replace: true })
        }
      })
      return
    }
    if (me.data.hasLiveOrg === false || me.data.hasActiveEmployee === false) {
      navigate('/no-organization', { replace: true })
    }
  }, [me.data, navigate])
  return <>{children}</>
}
