import 'server-only'

import { NextResponse } from 'next/server'
import { brokerLeadsAvailable } from '@/lib/data/broker-leads'
import { leadKindConfig, type LeadKind } from '@/lib/domain/broker-leads'
import { type SessionUser } from '@/lib/auth'
import { requireSurfaceApi } from '@/lib/auth/surface-guard'

/** The platform admin, or someone granted this kind's leads page (2026-09-23; two kinds since 2026-09-25). */
export async function requireInternal(kind: LeadKind = 'broker'): Promise<{ ok: true; user: SessionUser; actor: { id: string; label: string } } | { ok: false; response: NextResponse }> {
  const guard = await requireSurfaceApi(leadKindConfig(kind).surface)
  if (!guard.ok) return guard
  return { ok: true, user: guard.user, actor: { id: guard.user.id, label: guard.actor.label } }
}

/** Every leads route needs migration 0030; carrier leads also need 0039. */
export async function requireLeadsTables(kind: LeadKind = 'broker'): Promise<NextResponse | null> {
  if (await brokerLeadsAvailable(undefined, kind)) return null
  return NextResponse.json({ error: kind === 'carrier' ? 'The Carrier Leads columns are missing — apply supabase/migrations/0039_carrier_leads.sql first.' : 'The Freight Broker Leads tables are missing — apply supabase/migrations/0030_broker_leads_campaigns.sql first.' }, { status: 503 })
}
