// app/api/invites/accept/route.ts
import { NextRequest, NextResponse } from "next/server"
import { getServerSession } from "next-auth"
import { authOptions } from "@/lib/auth/config"
import { prisma } from "@/lib/prisma"

export async function POST(request: NextRequest) {
  try {
    const session = await getServerSession(authOptions)

    if (!session) {
      return NextResponse.json({ error: "Não autenticado" }, { status: 401 })
    }

    const { inviteCode } = await request.json()

    if (!inviteCode) {
      return NextResponse.json({ error: "Código de convite inválido" }, { status: 400 })
    }

    // Buscar convite
    const invite = await prisma.invite.findUnique({
      where: { token: inviteCode }
    })

    if (!invite) {
      return NextResponse.json({ error: "Convite não encontrado" }, { status: 404 })
    }

    // Buscar workspace
    const workspace = invite.workspaceId 
      ? await prisma.workspace.findUnique({ where: { id: invite.workspaceId } })
      : null

    if (!workspace) {
      return NextResponse.json({ error: "Workspace não encontrado" }, { status: 404 })
    }

    // Verificar se está expirado
    if (invite.expiresAt < new Date()) {
      return NextResponse.json({ error: "Convite expirado" }, { status: 400 })
    }

    // Verificar se já foi aceito
    if (invite.status !== "PENDING") {
      return NextResponse.json({ error: "Convite já foi utilizado" }, { status: 400 })
    }

    // Verificar se o email confere
    if (invite.email !== session.user.email) {
      return NextResponse.json({ error: "Este convite não é para você" }, { status: 403 })
    }

    // Atualizar convite
    await prisma.invite.update({
      where: { id: invite.id },
      data: {
        status: "ACCEPTED",
        acceptedAt: new Date()
      }
    })

    // Ativar workspace
    await prisma.workspace.update({
      where: { id: invite.workspaceId! },
      data: { status: "ACTIVE" }
    })

    return NextResponse.json({
      success: true,
      workspace: {
        id: workspace.id,
        slug: workspace.slug
      }
    })
  } catch (error: any) {
    console.error("Erro ao aceitar convite:", error)
    return NextResponse.json(
      { error: "Erro ao aceitar convite" },
      { status: 500 }
    )
  }
}

