// License: LGPL-3.0-or-later
const h = require('virtual-dom/h')
const request = require('../../common/super-agent-frp')
const view = require('vvvview')
const flyd = require('flyd')
const flatMap = require('flyd/module/flatmap')
const thunk = require('vdom-thunk')
const format = require('../../common/format')
const Im = require('immutable')
const fromJS = Im.fromJS
const Map = Im.Map

var npURL = '/nonprofits/' + app.nonprofit_id


const root = state => {
	var headerContent = ''
	if(state.get('loading')) {
		headerContent = [h('i.fa.fa-spin.fa-gear'), ' Confirming Bank Account...']
	} else if(!state.get('loading') && !state.get('pending_verification')) {
		headerContent = [h('i.fa.fa-check'), ' Bank Account Confirmed!']
	} else { // not loading and unable to confirm
		headerContent = ['Unable to confirm bank account.']
	}

	var confirmedMsg = !state.get('pending_verification') 
		? h('p', [
			'Your bank account connection has been confirmed with your email address. ',
				h("br"),
				h('a', {href: npURL + '/payouts'}, [h('i.fa.fa-return'), 'Return to your payouts dashboard'])
			])
		: ''

	return h('div', [
		h('h2', headerContent),
		confirmedMsg,
		thunk(accountInfo, state),
		h('hr'),
		h('p', [
			'If any of this looks incorrect, please contact: ',
			h('a', {href: 'mailto:support@commitchange.com'}, 'support@commitchange.com')
		])
	])
}


const accountInfo = state =>
	h('div.well', [
		h('p', ['Nonprofit: ', h('strong', state.getIn(['nonprofit', 'name'])), ]),
		h('p', ['New bank account: ', h('strong', state.get('name')), ]),
		h('p', ['User who made the change: ', h('strong', state.get('email')), ]),
		h('p', ['Date and time of update: ', h('strong', format.date.toSimple(state.get('created_at'))), ]),
	])


var state = fromJS(app.bankAccount).set('loading', true)

var confirmView = view(root, document.querySelector('.js-view-confirm'), state)


if(app.bankAccount.pending_verification) {
	var $confirmResponse = request.post(npURL + '/bank_account/confirm')
		.send({token: utils.get_param('t')})
		.perform()

	var $state = flyd.scan(
		(state, resp) => state.set('loading', false).set('pending_verification', false)
		, state
		, $confirmResponse)

	flyd.map(confirmView, $state)
} else {
	confirmView(state.set('loading', false).set('pending_verification', false))
}