import { redirect } from 'next/navigation'
import { getSessionUser } from '@/lib/auth'
import { contextForAccount, dashboardPath } from '@/lib/page-context'
import { loadActiveMode } from '@/lib/data/active-mode'
import { contextDashboard } from '@/lib/domain/modes'

function withQuery(path: string, onboarding?: string, tab?: string): string {
  const q = new URLSearchParams()
  if (onboarding) q.set('onboarding', onboarding)
  if (tab) q.set('tab', tab)
  const qs = q.toString()
  return `${path}${qs ? `?${qs}` : ''}`
}

/**
 * `/dashboard` is no longer a page (article "Role-Specific Page Separation",
 * 2026-09-13): every role has its own dashboard route. This resolves the
 * signed-in role — with the internal-only `?view=` override for admin testing
 * — and forwards there, carrying the pilot preview query (`onboarding`, `tab`).
 */
export default async function DashboardRedirect({
  searchParams,
}: {
  searchParams: Promise<{ view?: string; onboarding?: string; tab?: string }>
}) {
  const { view, onboarding, tab } = await searchParams
  const user = await getSessionUser()
  if (!user) redirect('/login')

  // Multi-role accounts (2026-09-24): the mode decides where this lands. One
  // active role opens straight away, a stored default opens straight away,
  // several roles and no default ask. An explicit admin ?view= still wins.
  const mode = await loadActiveMode()
  if (mode?.available && !view) {
    if (mode.active) redirect(withQuery(contextDashboard(mode.active), onboarding, tab))
    if (mode.landing.kind === 'open') redirect(`/api/modes/open?key=${encodeURIComponent(mode.landing.context.key)}`)
    if (mode.landing.kind === 'choose' || mode.isAdmin) redirect('/modes')
  }

  const ctx = contextForAccount(user.role, view, user.internal)
  const q = new URLSearchParams()
  if (onboarding) q.set('onboarding', onboarding)
  if (tab) q.set('tab', tab)
  const qs = q.toString()
  redirect(`${dashboardPath(ctx)}${qs ? `?${qs}` : ''}`)
}
