import { verifyToken, getUserById, readUsers, writeUsers, verifyPassword, hashPassword } from '../utils/auth.js'

export default defineEventHandler(async (event) => {
  try {
    const token = getCookie(event, 'auth_token')

    if (!token) {
      throw createError({
        statusCode: 401,
        message: 'Nicht authentifiziert.'
      })
    }

    const decoded = verifyToken(token)

    if (!decoded) {
      throw createError({
        statusCode: 401,
        message: 'Ungültiges Token.'
      })
    }

    const body = await readBody(event)
    const { name, email, phone, currentPassword, newPassword } = body

    if (!name || !email) {
      throw createError({
        statusCode: 400,
        message: 'Name und E-Mail sind erforderlich.'
      })
    }

    const users = await readUsers()
    const userIndex = users.findIndex(u => u.id === decoded.id)

    if (userIndex === -1) {
      throw createError({
        statusCode: 404,
        message: 'Benutzer nicht gefunden.'
      })
    }

    const user = users[userIndex]

    // Check if email is already taken by another user
    if (email !== user.email) {
      const emailExists = users.some(u => u.email === email && u.id !== user.id)
      if (emailExists) {
        throw createError({
          statusCode: 409,
          message: 'Diese E-Mail-Adresse wird bereits verwendet.'
        })
      }
    }

    // Update basic info
    user.name = name
    user.email = email
    user.phone = phone || ''

    // Handle password change
    if (currentPassword && newPassword) {
      const isValid = await verifyPassword(currentPassword, user.password)
      if (!isValid) {
        throw createError({
          statusCode: 401,
          message: 'Aktuelles Passwort ist falsch.'
        })
      }

      if (newPassword.length < 6) {
        throw createError({
          statusCode: 400,
          message: 'Das neue Passwort muss mindestens 6 Zeichen lang sein.'
        })
      }

      user.password = await hashPassword(newPassword)
    }

    await writeUsers(users)

    return {
      success: true,
      message: 'Profil erfolgreich aktualisiert.',
      user: {
        id: user.id,
        email: user.email,
        name: user.name,
        phone: user.phone,
        role: user.role
      }
    }
  } catch (error) {
    console.error('Profil-Update-Fehler:', error)
    throw error
  }
})

