// License: LGPL-3.0-or-later
var action_recipient = require("./action_recipient")
var request = require('../../../common/client')
require('../../../components/wizard')
var formatErr = require('../../../common/format_response_error')
const R = require('ramda')

appl.def('merge.has_any', function(arr) {
	var supporters =  appl.merge.data.supporters
	for(var i = 0, sup_len = supporters.length; i < sup_len; i++) {
		for(var j = 0, arr_len = arr.length; j < arr_len; j++) {
			var key = arr[j]
			if(supporters[i][key]) {
				appl.def('merge.data.has_at_least_one.' + key, true)
			}
		}
	}
})

appl.def('merge.init', function(){
	if (appl.supporters.selected.length > 5) {
		appl.notify("Sorry, you can't merge more than 5 records at a time.")
		return
	}
	if (appl.supporters.selected.length < 2) {
		appl.notify("Sorry, you need to select more than one record to merge.")
		return
	}
  var ids = appl.supporters.selected.map(function(s) { return s.id })
  appl.def('loading', true)
  appl.def('merge.data', '')
	appl.def('merge.data.action_recipient', action_recipient())
  request.get('/nonprofits/' + app.nonprofit_id + '/supporters/merge_data')
    .query({ids: ids})
    .end(function(err, res) {
      appl.def('loading', false)
      appl.def('merge.data.supporters', res.body)
      appl.merge.has_any(['name', 'email', 'phone', 'address'])
      appl.open_modal('mergeModal')
    })
})

appl.def('merge.set', function(form_obj, node) {
  var supp = appl.merge.data.new_supporter
  appl.def('merge.data.new_supporter', R.merge(supp, form_obj))
})

appl.def('merge.select_address', function(supp, node) {
	appl
		.def('merge.data.new_supporter.address', supp.address)
		.def('merge.data.new_supporter.city', supp.city)
		.def('merge.data.new_supporter.state_code', supp.state_code)
		.def('merge.data.new_supporter.zip_code', supp.zip_code )
		.def('merge.data.new_supporter.country', supp.country )
})

appl.def('merge.submit', function(form_object, node){
	appl.def('loading', true)

	request.post("/nonprofits/" + app.nonprofit_id + "/supporters/merge")
		.send({
			supporter: form_object,
			supporter_ids: appl.supporters.selected.map(function(s){return s.id})
		})
		.end(function(err, resp){
      appl.def('loading', false)
      if(resp.ok) {
        appl
        .def('supporters.selected', [])
        .notify('Supporters successfully merged.')
        .supporters.index()
      } else {
        appl.notify('Error: ' + formatErr(resp))
      }
		})
	appl.close_modal()
	appl.wizard.reset('merge_wiz')
})