// License: LGPL-3.0-or-later
require('../common/restful_resource')
const reorder = require('../components/drag-to-reorder')
const format = require('../common/format')
const R = require('ramda')

const url = `/nonprofits/${app.nonprofit_id}/campaigns/${app.campaign_id}/campaign_gift_options/update_order`

reorder(url, 'js-reorderGifts', appl.ajax_gift_options.index)

appl.def('ajax_gift_options', {

	update: function(form_obj, node) {
		if(checkForAmount(form_obj)){
			return
		}
		var id = appl.gift_options.current.id
		appl.ajax.update('gift_options', id, form_obj, node).then(function(resp) {
			node.parentNode.reset()
			appl.def('loading', false)
			appl.ajax_gift_options.index()
			appl.notify('Gift option updated successfully')
			appl.open_modal('manageGiftOptionsModal')
		})
	},

	create: function(form_obj, node) {
		if(checkForAmount(form_obj)){
			return
		}
		appl.ajax.create('gift_options', form_obj, node).then(function(resp) {
			node.parentNode.reset()
			appl.def('loading', false)
			appl.open_modal('manageGiftOptionsModal')
			appl.notify('Gift option created successfully')
			appl.ajax_gift_options.index()
		})
	},

	del: function(id, node) {
		var task = appl.ajax.del('gift_options', id, node)
		task.then(function(resp) {
			appl.open_modal('manageGiftOptionsModal')
			appl.notify('Gift option removed successfully')
			appl.ajax_gift_options.index()
		})
		task.catch(function(resp){
            appl.open_modal('manageGiftOptionsModal')
            appl.notify('This gift option has already been used. It can\'t be removed')
            appl.ajax_gift_options.index()
		})
	},

// Update or create a gift option depending on which mode we're in
	save: function(form_obj, node) {
    // the server expects both amount_one_time and amount_recurring to have 
    // a number value and this function passes in '0' as a fallback in the 
    // case that either input is left blank by the user
    const toCents = x => format.dollarsToCents(x || '0')

    var data = R.evolve({
        amount_one_time: toCents 
      , amount_recurring: toCents
      }, form_obj)
		if(appl.gift_options.is_updating) {
			appl.ajax_gift_options.update(data, node)
		} else {
			appl.ajax_gift_options.create(data, node)
		}
	},
})


function checkForAmount(form_obj) {
	if(!form_obj.amount_one_time && !form_obj.amount_recurring) {
		appl.notify('Please enter at least one amount')
		return true
	} else {
		return false
	}
}

appl.def('gift_options', {
	resource_name: 'campaign_gift_options',
	path_prefix: '/nonprofits/' + app.nonprofit_id + '/campaigns/' + app.campaign_id + '/',

	open_edit: function(gift_option) {
		appl.def('gift_options', {current: gift_option, is_updating: true})
			.def('gift_option_action', 'Edit')

		appl.open_modal('giftOptionFormModal')
	},

	open_new: function() {
		appl.def('gift_options', {current: undefined, is_updating: false})
			.def('gift_option_action', 'New')
		document.querySelector("#giftOptionFormModal form").reset()
		appl.open_modal('giftOptionFormModal')
	}
})