import { createAdminClient } from '@/lib/supabase/admin'
import { AppShell } from '@/components/app/app-shell'
import { STATE_NAMES } from '@/lib/domain/states'
import { filtersFromParams, leadKindConfig, type LeadKind } from '@/lib/domain/broker-leads'
import {
  brokerLeadsAvailable, brokerageRollups, filterLeads, loadAllLeads, loadBrokerCompanyMap, loadCampaigns, loadLeadTemplates, loadLeadsAnalytics, loadLeadsSettings, loadSegments, pageLeads, summarizeLeads,
} from '@/lib/data/broker-leads'
import { BrokerLeadsManager } from './manager'
import { requireSurface } from '@/lib/auth/surface-guard'
import { ModeratorAccessCard } from '@/components/app/moderator-access-card'

/**
 * The leads manager page for one kind (Nash, 2026-09-23; two kinds since
 * 2026-09-25): Freight Broker Leads at /admin/broker-leads, Carrier Leads at
 * /admin/carrier-leads. Internal staff only. Filters live in the URL so a
 * view can be shared. Tolerates the migration not being applied: shows what
 * to run.
 */
export async function LeadsPage({ kind, searchParams }: { kind: LeadKind; searchParams: Promise<Record<string, string | string[] | undefined>> }) {
  const cfg = leadKindConfig(kind)
  const { profile, canManage } = await requireSurface(cfg.surface)
  const sp = await searchParams
  const one = (k: string) => { const v = sp[k]; return (Array.isArray(v) ? v[0] : v) ?? null }

  const admin = createAdminClient()
  if (!(await brokerLeadsAvailable(admin, kind))) {
    return (
      <AppShell profile={profile}>
        <BrokerLeadsManager kind={kind} available={false} states={Object.keys(STATE_NAMES)} />
      </AppShell>
    )
  }
  const filters = filtersFromParams(one)
  const page = Number(one('page') || 1)
  const sort = (one('sort') as 'activity' | 'name' | 'brokerage' | null) ?? 'brokerage'
  const tab = one('tab') ?? 'leads'
  const [all, companies, settings, segments, templates, campaigns] = await Promise.all([
    loadAllLeads(admin, kind), loadBrokerCompanyMap(admin), loadLeadsSettings(admin, kind), loadSegments(admin, kind), loadLeadTemplates(admin, kind), loadCampaigns(admin, kind),
  ])
  const matching = filterLeads(all, filters)
  const leads = pageLeads(matching, page, sort)
  const summary = summarizeLeads(all)
  const filteredSummary = summarizeLeads(matching)
  const rollups = brokerageRollups(all, companies, kind)
  const analytics = tab === 'analytics' ? await loadLeadsAnalytics(all, campaigns, admin, kind) : null
  return (
    <AppShell profile={profile}>
      <BrokerLeadsManager
        kind={kind}
        available
        states={Object.keys(STATE_NAMES)}
        tab={tab}
        filters={filters}
        sort={sort}
        leads={leads}
        summary={summary}
        filteredSummary={filteredSummary}
        rollups={rollups}
        settings={settings}
        segments={segments}
        templates={templates}
        campaigns={campaigns}
        analytics={analytics}
        me={{ email: profile.email, name: profile.full_name || profile.email }}
      />
      <div className="mx-auto max-w-7xl px-4 pb-8">
        <ModeratorAccessCard surface={cfg.surface} canManage={canManage} />
      </div>
    </AppShell>
  )
}
