import { NextResponse } from "next/server"
import { hashPassword } from "better-auth/crypto"

import { prisma } from "@/lib/prisma"

export async function POST(request: Request) {
  try {
    const body = await request.json()
    const { token, password } = body

    if (!token || typeof token !== "string") {
      return NextResponse.json({ error: "Token inválido" }, { status: 400 })
    }

    if (!password || typeof password !== "string" || password.length < 6) {
      return NextResponse.json({ error: "A senha deve ter pelo menos 6 caracteres" }, { status: 400 })
    }

    // Busca o token de verificação
    const verification = await prisma.authVerification.findFirst({
      where: {
        value: token,
        identifier: { startsWith: "password-reset:" },
        expiresAt: { gt: new Date() },
      },
    })

    if (!verification) {
      return NextResponse.json({ error: "Token inválido ou expirado" }, { status: 400 })
    }

    // Extrai o userId do identifier
    const userId = verification.identifier.replace("password-reset:", "")

    // Busca o usuário
    const user = await prisma.authUser.findUnique({
      where: { id: userId },
    })

    if (!user) {
      return NextResponse.json({ error: "Usuário não encontrado" }, { status: 400 })
    }

    // Hash da nova senha
    const hashedPassword = await hashPassword(password)

    // Atualiza a conta do usuário com a nova senha
    await prisma.authAccount.updateMany({
      where: {
        userId: user.id,
        providerId: "credential",
      },
      data: {
        password: hashedPassword,
      },
    })

    // Remove o token usado
    await prisma.authVerification.delete({
      where: { id: verification.id },
    })

    return NextResponse.json({ success: true })
  } catch (error) {
    console.error("[RESET_PASSWORD] Erro:", error)
    return NextResponse.json({ error: "Erro ao redefinir senha" }, { status: 500 })
  }
}

// GET para validar se o token é válido (usado pela página)
export async function GET(request: Request) {
  try {
    const { searchParams } = new URL(request.url)
    const token = searchParams.get("token")

    if (!token) {
      return NextResponse.json({ valid: false, error: "Token não fornecido" })
    }

    const verification = await prisma.authVerification.findFirst({
      where: {
        value: token,
        identifier: { startsWith: "password-reset:" },
        expiresAt: { gt: new Date() },
      },
    })

    if (!verification) {
      return NextResponse.json({ valid: false, error: "Token inválido ou expirado" })
    }

    return NextResponse.json({ valid: true })
  } catch (error) {
    console.error("[RESET_PASSWORD] Erro ao validar token:", error)
    return NextResponse.json({ valid: false, error: "Erro ao validar token" })
  }
}
