logger = require 'winston'
moment = require 'moment'
Q = require 'q'
authorisation = require './authorisation'
utils = require "../utils"

levels =
  debug: 1
  info: 2
  warn: 3
  error: 4

exports.getLogs = ->
  # Only admins can view server logs
  if not authorisation.inGroup 'admin', this.authenticated
    utils.logAndSetResponse this, 403, "User #{this.authenticated.email} is not an admin, API access to getLogs denied.", 'info'
    return

  query = this.request.query
  if not query?
    query = {}

  # default to info level logs
  if not query.level?
    query.level = 'info'

  options =
    from: query.from || moment().subtract(5, 'minutes').toDate()
    until: query.until || new Date
    order: 'asc'
    start: (parseInt query.start) || 0
    limit: 100000 # limit: 0 doesn't work :/

  results = yield Q.ninvoke logger, 'query', options
  results = results.mongodb

  if query.level?
    results = results.filter (item) ->
      return levels[item.level] >= levels[query.level]

  if query.limit?
    results.splice query.limit, results.length-query.limit

  this.body = results
  this.status = 200
