import { NextRequest, NextResponse } from 'next/server'
import { publicOrigin } from '@/lib/app-url'
import { resolveBillingContext } from '@/lib/data/billing-context'
import { requestCheckout } from '@/lib/data/purchases'
import { mockScenario } from '@/lib/integrations/synchron-payments'
import { loadTrip, requirePurchaseOwner } from '@/lib/purchase-api'

/** Ask Synchron for a checkout URL (task §5.3). Reuses an existing URL while the purchase is still pending. */
export async function POST(req: NextRequest, ctx: { params: Promise<{ purchaseId: string }> }) {
  const { purchaseId } = await ctx.params
  const guard = await requirePurchaseOwner(purchaseId)
  if (!guard.ok) return guard.response
  const trip = await loadTrip(guard.bundle.purchase.hha_trip_id)
  if (!trip) return NextResponse.json({ error: 'Trip not found.' }, { status: 404 })
  const billing = await resolveBillingContext(guard.user, trip)
  if (!billing.ok) return NextResponse.json({ error: 'Your active company cannot bill for this trip.' }, { status: 403 })
  const result = await requestCheckout({
    bundle: guard.bundle,
    billing: billing.billing,
    actorUserId: guard.user.id,
    actorLabel: guard.actorLabel,
    appOrigin: publicOrigin(req),
    scenario: mockScenario(req),
  })
  if (!result.ok) return NextResponse.json({ error: result.error, code: result.code }, { status: result.status })
  return NextResponse.json({ ok: true, checkout_url: result.checkoutUrl, reused: result.reused })
}
