// License: LGPL-3.0-or-later
var R = require('ramda')
var request = require('../../common/client')
var format = require('../../common/format')

appl.def('discounts.create_or_update', function(form_obj, node){
  appl.def('discounts.loading', true)
  if(!validate(form_obj)) {
     appl.def('discounts.loading', false)
    return
  }
  if(form_obj.id) {
    update_discount(form_obj)
  } else {
    delete form_obj.id
    create_discount(form_obj)
  }
})


appl.def('discounts.show_new', function(){
  appl.def('discounts.editing', {id: '', name: '', percent: '', code: ''})
  appl.open_modal('createOrEditDiscountsModal')
})


appl.def('discounts.show_edit', function(i){
  appl.def('discounts.editing', appl.discounts.data[i])
  appl.open_modal('createOrEditDiscountsModal')
})


function update_discount(form_obj){
  request.put(appl.discounts.url + '/' + form_obj.id, form_obj)
    .end(function(err, resp){
      after_create_or_edit("Discount successfully edited")
  })
}


appl.def('discounts.delete', function(id){
  request.del(appl.discounts.url + '/' + id).end(function(err, resp) {
      appl.notify('Discount successfully deleted')
      appl.discounts.index()
    })
})


function create_discount(form_obj){
  request.post(appl.discounts.url, form_obj)
    .end(function(err, resp){
      after_create_or_edit("Discount successfully added")
    })
}


function after_create_or_edit(message){
  appl.discounts.index()
  appl.notify(message)
  appl.open_modal("manageDiscountsModal")
  appl.def('discounts.loading', false)
}


function validate(form_obj){
  var blanks =['name', 'percent', 'code']
  var message = ''
  blanks.map(function(a, i) {
    if(!form_obj[a]) { message += format.capitalize(a) + ', '}
  })
  if (message) {
    appl.notify(message + " can't be blank")
    return false
  }
  var percent = Number(form_obj.percent)
  if (!Boolean(percent) || percent <= 0) {
    appl.notify("Percentage must be a number larger than 0")
    return false
  }
  if(percent > 100) {
    appl.notify("Percentage can't be more than 100")
    return false
  }
  var codes = R.pluck('code', R.reject(function(x){ return x['id'] === Number(form_obj.id)}, appl.discounts.data))
  var hasDupeCodes = R.contains(form_obj.code, codes)
 
  if (hasDupeCodes){
    appl.notify("That code is already being used for this event.  Please type another code.")
    return false
  }
  return form_obj
}