// License: LGPL-3.0-or-later
var request = require('../../../common/super-agent-promise')
var format_err = require('../../../common/format_response_error')
var create_offline_donation = require('../../../donations/create_offline')

appl.def('supporter_details', {
	resource_name: 'supporters',

	// Assign the selected supporter to the one clicked on
	// Fetch the full data for that supporter with ajax after setting
	// Show the side panel
	show: function(supporter) {
		appl.open_side_panel()
		appl.def('supporter_details', supporter)
		appl.def('supporters.selected', [supporter])
		appl.def('timeline_action', null)
		appl.ajax_supporter.fetch(supporter.id)
		var path = 'supporters/' + supporter.id + '/'
		appl.def('supporter_details.tags.path_prefix', path)
		appl.def('supporter_details.activities.path_prefix', path)
		appl.def('supporter_details.supporter_notes.path_prefix', path)
		appl.def('supporter_details.custom_fields.path_prefix', path)
    request.get('/nonprofits/' + app.nonprofit_id + '/supporters/' + supporter.id + '/tag_joins').perform()
    .then(function(r) { appl.def('supporter_details.tags', r.body) })
		appl.ajax.index('supporter_details.custom_fields')
	},

	toggle_panel: function(supporter, node) {
		appl.close_modal()
		var tr = node.parentNode.parentNode

		if(tr.hasAttribute('data-selected')) {
			appl.close_side_panel()
			tr.removeAttribute('data-selected','')
		} else {
			appl.supporter_details.show(supporter)
			$('.mainPanel').find('tr').removeAttr('data-selected')
			tr.setAttribute('data-selected','')
			// add supporter_id to url param
			var path =  window.location.pathname + "?sid=" + supporter.id
			window.history.pushState({},'supporter id', path)
		}
	}
})


appl.def('ajax_supporter', {
	update: function(id, form_obj, node) {
		appl.def('loading', true)
		appl.ajax.update('supporter_details', id, form_obj).then(function(resp) {
			appl.def('loading', false)
			appl.supporters.index()
			if(resp.body.deleted) {
				appl.find_and_remove('supporters.data', {id: resp.body.id})
				appl.close_side_panel()
				appl.notify('Supporter successfully deleted')
			} else {
				appl.find_and_set('supporters.data', {id: resp.id}, resp)
				appl.close_modal()
				appl.notify('Supporter updated!')
			}
		})
	},

	fetch: function(id) {
		appl.def('loading', true)
		appl.ajax.fetch('supporter_details', id).then(function(resp) {
			appl.def('supporter_details.data.name_email_or_id',
				resp.body.data.name || resp.body.data.fc_full_name || resp.body.data.email || 'Supporter #' + resp.body.data.id)
			appl.def('supporter_details.data.websites',
					resp.body.data.fc_websites ? resp.body.data.fc_websites.split(',') : false
				)
			appl.def('loading', false)
		})
		fetch_full_contact(id)
	}
})

function fetch_full_contact(id){
	appl.def('supporter_details.data.full_contact', {photo: false, current_job: false, interests: false, jobs: false, social: false})
	request.get('/nonprofits/' + app.nonprofit_id + '/supporters/' + id + '/full_contact').perform()
		.then(function(resp){
			var data = resp.body.full_contact
			if (!data) {
					appl.def('supporter_details.data.full_contact', false)
					return
			}
			appl.def('supporter_details.data.full_contact', {
					  photo : data.photo && data.photo[0] ? data.photo[0].url : false
					, current_job : data.orgs ? data.orgs.map(function(d){if (d.current) return d })[0] : false
					, interests : data.topics
					, jobs: data.orgs
					, social: data.profiles
			})
		})
}


appl.ajax_supporter.create = function(form_obj, node) {
	appl.def('supporter_details', {loading: true, error: ''})
	return request.post('/nonprofits/' + app.nonprofit_id + '/supporters').send({supporter: form_obj}).perform()
		.then(function() {
			appl.def('supporter_details', {loading: false})
			appl.close_modal()
			appl.notify("Supporter successfully created!")
			appl.supporters.index()
			appl.prev_elem(node).reset()
		})
		.catch(function(resp) {
			appl.def('supporter_details', {error: format_err(resp), loading: false})
		})
}


appl.def('supporter_details.tags', {
	resource_name: 'tag_joins'
})

appl.def('supporter_details.custom_fields', {
	resource_name: 'custom_field_joins'
})


appl.def('supporter_details.activities', {
	resource_name: 'activities'
})

appl.def('supporter_details.supporter_notes', {
	resource_name: 'supporter_notes'
})


// Override the default 'close_side_panel' function provided by
// panels_layout.js so we can set some extra data
var old_close_fn = appl.close_side_panel
appl.def('close_side_panel', function(){
	appl.def('supporters.selected', appl.get_checked_supporters())
	old_close_fn.apply(appl)
})



appl.def('delete_selected_supporters', function(id){
	appl.supporters.selected.forEach(function(supp) {
		appl.ajax_supporter.update(supp.id, {deleted: true})
	})
	appl.close_side_panel()
})

appl.def('supporter_details.address_with_commas', utils.address_with_commas)


appl.def('create_offline_donation', function(form_obj, el) {
	create_offline_donation(form_obj, createDonationUI)
		.then(function(resp) {
			appl.ajax.index('supporter_details.activities')
			appl.prev_elem(el).reset()
		})
})

var createDonationUI = {
	start: function(){
		appl.is_loading()
		appl.def('new_offline_donation', {loading: true, error: ''})
	},
	success: function(){
		appl.not_loading()
		appl.def('new_offline_donation', {loading: false})
		appl.notify("Offline donation created successfully")
		appl.close_modal()
	},
	fail: function(resp){
		appl.def('new_offline_donation', {loading: false, error: format_err(resp)})
    appl.def('loading', false).def('error', format_err(resp))
	}
}

// Initialize the date picker inside the offline donation modal
var Pikaday = require('pikaday')
new Pikaday({
	field: document.querySelector('#js-offsiteDonationDate'),
	format: 'M/D/YYYY'
})