import { NextRequest, NextResponse } from 'next/server'
import { invitationRepo } from '@/lib/database/repositories/invitation.repo'

/**
 * GET /api/invite/[token]/public
 * Public endpoint — no auth required.
 * Returns invitation info for the onboarding page.
 */
export async function GET(
  req: NextRequest,
  { params }: { params: Promise<{ token: string }> },
) {
  const { token } = await params

  const invite = invitationRepo.findByInviteToken(token)

  if (!invite) {
    return NextResponse.json({ error: 'Invitation not found' }, { status: 404 })
  }

  // Check if expired
  const now = Math.floor(Date.now() / 1000)
  if (invite.status === 'expired' || now > invite.expiresAt) {
    // Auto-expire if past expiry
    if (invite.status !== 'expired') {
      invitationRepo.markExpired(invite.id)
    }
    return NextResponse.json({ status: 'expired', message: 'This invitation has expired' })
  }

  if (invite.status === 'cancelled') {
    return NextResponse.json({ status: 'cancelled', message: 'This invitation was cancelled' })
  }

  if (invite.status === 'completed') {
    return NextResponse.json({ status: 'completed', message: 'This invitation has already been used' })
  }

  // Look up inviter name. Single JOIN against user; invite_token is the
  // unique key and idx_invitations_token makes this O(log n).
  const inviter = invitationRepo.findInviterNameByInviteToken(token)

  return NextResponse.json({
    status: invite.status,
    inviterName: inviter?.name || 'Someone',
    inviteToken: invite.inviteToken,
    inviteePhone: invite.inviteePhone,
    inviteeName: invite.inviteeName,
    qrcodeContent: invite.qrcodeUrl,
  })
}
