import { NextResponse } from 'next/server'
import { getUserFromToken } from '@/lib/auth'
import { prisma } from '@/lib/db'

export const runtime = 'nodejs'

function getErrorMessages(locale: string = 'ro') {
  const messages = {
    ro: {
      unauthorized: 'Nu esti autentificat',
      nameRequired: 'Numele este obligatoriu',
      updateFailed: 'Actualizarea a eșuat',
      success: 'Profil actualizat cu succes'
    },
    en: {
      unauthorized: 'Unauthorized',
      nameRequired: 'Name is required',
      updateFailed: 'Update failed',
      success: 'Profile updated successfully'
    }
  }
  return messages[locale as keyof typeof messages] || messages.ro
}

export async function PUT(request: Request) {
  try {
    const url = new URL(request.url)
    const locale = url.searchParams.get('locale') || 'ro'
    const messages = getErrorMessages(locale)

    // Get token from authorization header
    const authHeader = request.headers.get('authorization')
    const token = authHeader?.replace('Bearer ', '')

    if (!token) {
      return NextResponse.json({ error: messages.unauthorized }, { status: 401 })
    }

    // Verify token and get user
    const user = await getUserFromToken(token)

    if (!user) {
      return NextResponse.json({ error: messages.unauthorized }, { status: 401 })
    }

    // Parse request body
    const { name } = await request.json()

    // Validate input
    if (!name || typeof name !== 'string' || name.trim().length === 0) {
      return NextResponse.json({ error: messages.nameRequired }, { status: 400 })
    }

    // Update user profile using raw query
    await prisma.$executeRaw`
      UPDATE "User"
      SET name = ${name.trim()}, "updatedAt" = CURRENT_TIMESTAMP
      WHERE id = ${user.id}
    `

    // Get updated user data
    const updatedUsers = await prisma.$queryRaw`
      SELECT id, email, name, role, theme, "fontSize", "createdAt", "updatedAt", "lastLoginAt"
      FROM "User"
      WHERE id = ${user.id}
    `
    const updatedUser = Array.isArray(updatedUsers) && updatedUsers.length > 0 ? updatedUsers[0] : null

    return NextResponse.json({
      message: messages.success,
      user: updatedUser
    })

  } catch (error) {
    console.error('Profile update error:', error)
    const url = new URL(request.url)
    const locale = url.searchParams.get('locale') || 'ro'
    const messages = getErrorMessages(locale)

    return NextResponse.json({ error: messages.updateFailed }, { status: 500 })
  }
}