function validate(schema, property) {
  // Return a Koa middleware function
  return (ctx, next) => {
    if (!schema) {
      return next()
    }
    let params = null
    if (ctx[property] != null) {
      params = ctx[property]
    } else if (ctx.request[property] != null) {
      params = ctx.request[property]
    }
    const { error } = schema.validate(params)
    if (error) {
      ctx.throw(400, `Invalid ${property} - ${error.message}`)
      return
    }
    return next()
  }
}

module.exports.body = schema => {
  return validate(schema, "body")
}

module.exports.params = schema => {
  return validate(schema, "params")
}
