// app/api/auth/forgot-password/route.ts
import { NextRequest, NextResponse } from "next/server"
import { prisma } from "@/lib/prisma"
import crypto from "crypto"

export async function POST(request: NextRequest) {
  try {
    const { email } = await request.json()

    if (!email) {
      return NextResponse.json(
        { error: "Email é obrigatório" },
        { status: 400 }
      )
    }

    // Verificar se usuário existe
    const user = await prisma.user.findUnique({
      where: { email }
    })

    // Por segurança, sempre retornar sucesso mesmo se o email não existir
    // Isso previne enumeração de emails
    if (!user) {
      return NextResponse.json({
        success: true,
        message: "Se o email existir, você receberá um link para redefinir sua senha"
      })
    }

    // Verificar se o usuário tem senha (não é apenas OAuth)
    if (!user.password) {
      return NextResponse.json({
        success: true,
        message: "Se o email existir, você receberá um link para redefinir sua senha"
      })
    }

    // Gerar token único
    const token = crypto.randomBytes(32).toString("hex")
    const expiresAt = new Date()
    expiresAt.setHours(expiresAt.getHours() + 1) // Token válido por 1 hora

    // Invalidar tokens anteriores não usados
    await prisma.$executeRaw`
      UPDATE password_reset_tokens
      SET used = true
      WHERE email = ${email}
        AND used = false
        AND "expiresAt" > NOW()
    `

    // Criar novo token
    await prisma.$executeRaw`
      INSERT INTO password_reset_tokens (id, email, token, "expiresAt", used, "createdAt")
      VALUES (gen_random_uuid()::text, ${email}, ${token}, ${expiresAt}, false, NOW())
    `

    // TODO: Enviar email com link de reset
    // Por enquanto, retornamos o token (apenas para desenvolvimento)
    // Em produção, enviar email com: `${process.env.NEXTAUTH_URL}/reset-password?token=${token}`
    
    const resetUrl = `${process.env.NEXTAUTH_URL || "https://pdimaker.com.br"}/reset-password?token=${token}`
    
    console.log(`[FORGOT PASSWORD] Reset URL for ${email}: ${resetUrl}`)

    return NextResponse.json({
      success: true,
      message: "Se o email existir, você receberá um link para redefinir sua senha",
      // Como não temos email configurado, sempre mostrar o link
      resetUrl
    })
  } catch (error: any) {
    console.error("Erro ao solicitar reset de senha:", error)
    return NextResponse.json(
      { error: "Erro ao processar solicitação" },
      { status: 500 }
    )
  }
}

