import { createAdminClient } from '@/lib/supabase/admin'
import { AppShell } from '@/components/app/app-shell'
import { STATE_NAMES } from '@/lib/domain/states'
import type { InvitationStatus } from '@/lib/domain/pilot-network'
import {
  loadAnalytics,
  loadAuditLog,
  loadCampaigns,
  loadCapabilityTypes,
  loadPilotTemplates,
  loadProfiles,
  loadSettings,
  loadSummary,
  pilotNetworkAvailable,
} from '@/lib/data/pilot-network'
import { PilotInvitationManager } from './pilot-invitation-manager'
import { requireSurface } from '@/lib/auth/surface-guard'
import { ModeratorAccessCard } from '@/components/app/moderator-access-card'

/**
 * Pilot Invitation Manager (brief "Build the Pilot Invitation Manager Under
 * Moderator Tools", 2026-09-14). Internal operations tool for HeavyHaul
 * Agent staff (§8) — not a public page. Gated on the internal flag (answer
 * 8) like every admin tool; a customer is sent to their dashboard.
 *
 * Filters live in the URL (?q=&state=&cap=&status=&page=) so a view can be
 * shared. Tolerates migration 0018 not being applied: shows a banner.
 */
export default async function PilotInvitationManagerPage({ searchParams }: { searchParams: Promise<Record<string, string | string[] | undefined>> }) {
  const { profile, canManage } = await requireSurface('pilot_invitations')
  const sp = await searchParams
  const one = (v: string | string[] | undefined) => (Array.isArray(v) ? v[0] : v) ?? ''
  const caps = ([] as string[]).concat(sp.cap ?? []).flatMap((c) => c.split(',')).filter(Boolean)

  const admin = createAdminClient()
  const available = await pilotNetworkAvailable(admin)
  if (!available) {
    return (
      <AppShell profile={profile}>
        <PilotInvitationManager available={false} states={Object.keys(STATE_NAMES)} />
      </AppShell>
    )
  }
  const filters = { q: one(sp.q), state: one(sp.state).toUpperCase(), capabilities: caps, status: one(sp.status) as InvitationStatus | '', page: Number(one(sp.page) || 1) }
  const [summary, leads, capabilityTypes, campaigns, templates, analytics, audit, settings] = await Promise.all([
    loadSummary(admin),
    loadProfiles(filters, admin),
    loadCapabilityTypes(admin),
    loadCampaigns(admin),
    loadPilotTemplates(admin),
    loadAnalytics(admin),
    loadAuditLog(200, admin),
    loadSettings(admin),
  ])
  return (
    <AppShell profile={profile}>
      <PilotInvitationManager
        available
        states={Object.keys(STATE_NAMES)}
        summary={summary}
        leads={leads}
        filters={filters}
        capabilityTypes={capabilityTypes}
        campaigns={campaigns}
        templates={templates}
        analytics={analytics}
        audit={audit}
        settings={settings}
      />
      <div className="mx-auto max-w-7xl px-4 pb-8">
        <ModeratorAccessCard surface="pilot_invitations" canManage={canManage} />
      </div>
    </AppShell>
  )
}
