// License: LGPL-3.0-or-later
var flyd = require("flyd")
var h = require("virtual-dom/h")

module.exports = {root: root}

function root(state) {
	return [
		h('header.step-header', h('h4.step-title', 'Preview')),
		h('div.step-inner', [
			body(state.settings)
		])
	]
}

function body(settings){
	if(settings.designations.name === 'multiple'){
		settings.designations.multiples = objToArray(settings.designations.multiples)
	}
	if(settings.amounts.name === 'multiple') {
		settings.amounts.multiples = objToArray(settings.amounts.multiples)
	}
	return [
		h('p.strong.u-centered', 'Below is a live preview of your donate form'),
		donateButton(settings),
		table(settings)
	]
}

function table(settings) {
	var table = h('table.table--plaid',[
		h('tr', [h('td', 'Appearance'), appearanceTd(settings.appearance)]),
		singleOrMultipleRow(settings.designations, 'Designation'),
		singleOrMultipleRow(settings.amounts, 'Amount'),
		h('tr', [h('td', 'Recurring or one-time'), h('td', settings.type.name)]),
    h('tr', [h('td', 'Hide dedication'), h('td', ifAny(settings.hideDedication ? 'true' :  h('span.u-color--grey', 'false')))]),
		h('tr', [h('td', 'Thank-you page url'), h('td', ifAny(settings.thankYou.url))]),
	])
	return table
}

function appearanceTd(data) {
	if(data.name === 'custom image') {
		return h('td', [data.name, h('p.u-color--grey', data.customImg)])
	}
	if(data.name === 'custom text') {
		return h('td', [data.name, h('p.u-color--grey', data.customText)])
	}
	return h('td', data.name)
}

function singleOrMultipleRow(obj, text) {
	if(obj.name === 'single'){
		return h('tr', [h('td', text), h('td', obj.single+='')])
	}
	if(obj.name === 'multiple'){
		return h('tr', [h('td', text + 's'), h('td', arrayToList(obj.multiples))])
	}
	return h('tr', [h('td', text), h('td', h('span.u-color--grey', 'none'))])
}

function donateButton(settings) {
	return h('div.u-centered.u-margin--20', {id: 'js-donateButtonWrapper'},
		h('a.commitchange-donate', {attributes: buttonAttributes(settings)},
			[buttonContent(settings.appearance)]
		)
	)
}

function buttonAttributes(settings) {
	var appearance = settings.appearance.name
	var attrs = {}
	if(appearance === 'custom image' || appearance === 'custom text') {
		attrs['data-custom'] = ''
	}
	if (appearance === 'fixed') {
		attrs['data-fixed'] = ''
	}
	if (appearance === 'embedded'){
		attrs['data-embedded'] = ''
	}
	if (settings.designations.name === 'single' && settings.designations.single) {
		attrs['data-designation'] = settings.designations.single
	}
	if (settings.designations.name === 'multiple' && settings.designations.multiples.length) {
		attrs['data-multiple-designations'] = arrayToStringWithSeparator(settings.designations.multiples, '_')
	}
	if (settings.designations.name === 'multiple' && settings.designations.prompt) {
		attrs['data-designations-prompt'] = settings.designations.prompt
	}
	if (settings.amounts.name === 'single' && settings.amounts.single) {
		attrs['data-amount'] = settings.amounts.single
	}
	if (settings.amounts.name === 'multiple' && settings.amounts.multiples.length) {
		attrs['data-amounts'] = arrayToStringWithSeparator(settings.amounts.multiples, ',')
	}
	if (settings.thankYou.url) {
		attrs['data-redirect'] = settings.thankYou.url
	}
	if (settings.type.name === 'one time') {
		attrs['data-type'] = 'one-time'
	}
	if (settings.type.name === 'recurring') {
		attrs['data-type'] = 'recurring'
	}
  if (settings.hideDedication) {
    attrs['data-hide-dedication'] = ''
  }
	return attrs
}


function buttonContent(data) {
	if (data.name === 'custom image') {
		return h('img', {src: data.customImg})
	}
	if (data.name === 'custom text') {
		return h('span', data.customText)
	}
}

// todo: add to helpers or make global once we move away from view-script

function arrayToStringWithSeparator(array, separator) {
	return array.reduce(function(prev, current){
		return prev + separator + current
	})
}

function camelCase(string) {
	return string.split(" ").reduce(function(prev, current){
		return prev + current.charAt(0).toUpperCase() + current.slice(1)
	})
}

function ifAny(data) {
	if(data) {
		return data
	}
	return h('span.u-color--grey', 'none')
}

function objToArray(obj) {
	var array = []
	for(var key in obj) {
		if(obj[key]) { array.push(obj[key])}
	}
	return array
}

function arrayToList(array , cssClass) {
	var cssClass = cssClass ? cssClass : '.' + 'hasBullets--grey'
	var lis = []
	array.map(function(item){
		item+=''
		if(item && item.length) {lis.push(h('li', item))}
	})
	return h('ul' + cssClass, lis)
}