/**
 * Endpoint para obtener notificaciones pendientes para el usuario actual
 *
 * Este endpoint permite al cliente hacer polling para obtener notificaciones
 * generadas por el backend que aún no han sido entregadas.
 *
 * Casos de uso:
 * - Polling periódico para obtener nuevas notificaciones
 * - Sincronización inicial al cargar la aplicación
 */

// En memoria: cola de notificaciones por usuario
// Nota: En producción, esto debería estar en Redis o una BD
const notificationQueue = new Map<string, any[]>()

export default defineEventHandler(async (event) => {
  try {
    // Leer el usuario actual de los headers de Authentik
    const headers = getHeaders(event)
    const userId = headers['x-authentik-uid']
    const username = headers['x-authentik-username']

    // Verificar que el usuario esté autenticado
    if (!userId) {
      throw createError({
        statusCode: 401,
        statusMessage: 'Usuario no autenticado'
      })
    }

    // Obtener notificaciones pendientes para este usuario
    const pendingNotifications = notificationQueue.get(userId) || []

    // Limpiar la cola después de entregarlas
    notificationQueue.delete(userId)

    return {
      success: true,
      notifications: pendingNotifications,
      count: pendingNotifications.length,
      user: {
        uid: userId,
        username
      }
    }
  } catch (error: any) {
    console.error('Error al obtener notificaciones:', error)

    // Si ya es un error de H3, relanzarlo
    if (error.statusCode) {
      throw error
    }

    // Error genérico
    throw createError({
      statusCode: 500,
      statusMessage: 'Error al obtener notificaciones'
    })
  }
})

/**
 * Función helper para agregar una notificación a la cola de un usuario
 * Esta función puede ser llamada desde otros endpoints del servidor
 */
export function queueNotification(userId: string, notification: any) {
  if (!notificationQueue.has(userId)) {
    notificationQueue.set(userId, [])
  }
  notificationQueue.get(userId)!.push(notification)
}
