import { NextResponse } from 'next/server'
import { checkAgentAuth, checkAgentWrite } from '@/lib/agent-auth'
import { buildReviewPayload, persistReview } from '@/lib/review'

export const runtime = 'nodejs'

/** GET — the review prompt for a freshly generated set. */
export async function GET(req: Request) {
  if (!checkAgentAuth(req)) return new NextResponse('Unauthorized', { status: 401 })
  const setId = new URL(req.url).searchParams.get('setId')
  if (!setId) return NextResponse.json({ error: 'setId required' }, { status: 400 })
  try {
    return NextResponse.json(await buildReviewPayload(setId))
  } catch {
    return NextResponse.json({ error: 'set not found' }, { status: 404 })
  }
}

/** POST — the reviewer's verdicts. DROP withholds the item; nothing is deleted. */
export async function POST(req: Request) {
  if (!checkAgentWrite(req)) return new NextResponse('Unauthorized', { status: 401 })

  let body: { setId?: string; summary?: string; items?: unknown; pass?: number }
  try {
    body = await req.json()
  } catch {
    return new NextResponse('Bad JSON', { status: 400 })
  }
  if (!body.setId || !Array.isArray(body.items)) {
    return NextResponse.json({ error: 'setId and items required' }, { status: 400 })
  }

  try {
    const result = await persistReview({
      setId: body.setId,
      summary: String(body.summary ?? ''),
      verdicts: body.items as { position?: unknown; verdict?: unknown; note?: unknown }[],
      pass: Number(body.pass) === 2 ? 2 : 1,
    })
    return NextResponse.json({ ok: true, ...result })
  } catch (err) {
    return NextResponse.json(
      { error: err instanceof Error ? err.message : 'failed' },
      { status: 400 },
    )
  }
}
