import { HttpError } from 'flaska'
import { getApp, stopSpam } from '../util.mjs'

/*
 * POST: /update/:name
 *
 */
export async function updateApp(ctx) {
  let app = getApp(ctx, ctx.params.name, 'POST.update')
  if (!app) {
    ctx.status = 404
    return ctx.body = {
      status: 404,
      message: `Application ${ctx.params.name} was not found`
    }
  }

  let t = stopSpam(ctx, 'update', ctx.params.name)
  if (t) {
    let d2 = new Date()
    let timeLeft = 
    Math.round((new Date(t).setMinutes(t.getMinutes() + 1) - d2) / 1000)
    ctx.headers['Retry-After'] = timeLeft
    
    ctx.status = 503
    return ctx.body = {
      status: 503,
      message: `Update request too fast for ${ctx.params.name}. Try again in ${timeLeft} seconds.`
    }
  }

  return app.update()
  .then(function(res) {
    if (res) {
      ctx.body = res
    } else {
      ctx.body = {
        message: 'No update was found',
      }
    }
  }, function(err) {
    ctx.log.error(err)
    
    ctx.status = 500
    return ctx.body = {
      status: 500,
      message: `Application ${ctx.params.name} failed to update: ${err.message}`,
    }
  })
}