import { useMe } from '@/lib/useMe'

interface Props {
  /** Список ролей, любая из которых открывает доступ. SuperAdmin всегда проходит. */
  roles: ('Admin' | 'Cashier' | 'Storekeeper' | 'SuperAdmin')[]
  children: React.ReactNode
}

/** Render-guard: если у текущего юзера нет одной из указанных ролей —
 * показываем сообщение «нет доступа» вместо контента страницы.
 *
 * Не подменяет серверную авторизацию (см. [Authorize(Roles = ...)] на
 * controller endpoint-ах), это только UX-слой: чтобы юзер на /employees
 * без прав не видел крутящееся колесо + 403 от каждого запроса, а сразу
 * понимал что страница ему не положена. */
export function RoleGuard({ roles, children }: Props) {
  const me = useMe()
  if (me.isLoading) return null
  const userRoles = me.data?.roles ?? []
  const allowed = userRoles.includes('SuperAdmin') || userRoles.some((r) => (roles as string[]).includes(r))
  if (!allowed) {
    return (
      <div className="min-h-[60vh] flex items-center justify-center px-4">
        <div className="max-w-md text-center space-y-3">
          <h1 className="text-2xl font-bold">Нет доступа</h1>
          <p className="text-sm text-slate-600 dark:text-slate-400">
            Этот раздел доступен только администраторам организации.
            Если вам нужен доступ — обратитесь к администратору.
          </p>
        </div>
      </div>
    )
  }
  return <>{children}</>
}
