import { redirect } from 'next/navigation'
import { getProfile } from '@/lib/auth'
import { AppShell } from '@/components/app/app-shell'
import { BackLink } from '@/components/app/back-link'
import { loadActiveMode } from '@/lib/data/active-mode'
import { pastContexts, pendingContexts, switchableContexts } from '@/lib/domain/modes'
import { RolesWorkspaces } from './roles-workspaces'

/**
 * Roles & Workspaces (Nash, 2026-09-24, §18): every relationship on the
 * account — active, waiting for verification, and past — with Open, Set
 * Default and Remove Role.
 */
export default async function RolesPage() {
  const mode = await loadActiveMode()
  if (!mode) redirect('/login?next=%2Fsettings%2Froles')
  const profile = (await getProfile())!
  return (
    <AppShell profile={profile}>
      <main className="mx-auto max-w-3xl px-4 py-8">
        <BackLink />
        <h1 className="text-2xl font-bold tracking-tight">Roles &amp; Workspaces</h1>
        <p className="mt-1 text-sm text-neutral-500">Every role on your HeavyHaul Agent account. One account, several roles, one mode at a time.</p>
        {!mode.available && (
          <div className="mt-4 rounded-xl border border-amber-300 bg-amber-50 p-4 text-sm text-amber-900">
            <p className="font-semibold">Migration 0034 is not applied.</p>
            <p className="mt-1">Run <code className="rounded bg-white px-1">supabase/migrations/0034_multi_role_modes.sql</code>, then <code className="rounded bg-white px-1">node scripts/verify-migration-0034.mjs</code>. Until then your account uses its single role exactly as before.</p>
          </div>
        )}
        <RolesWorkspaces
          active={switchableContexts(mode.contexts)}
          pending={pendingContexts(mode.contexts)}
          past={pastContexts(mode.contexts)}
          defaultKey={mode.defaultKey}
          activeKey={mode.active?.key ?? null}
          isAdmin={mode.isAdmin}
          adminDefault={mode.adminDefault}
          workspaces={mode.adminWorkspaces}
        />
      </main>
    </AppShell>
  )
}
