import './style.scss';

export default new Class({
	Extends: Hedera.Form,
	Template: require('./ui.xml'),

	async open() {
		const basket = new Hedera.Basket(this.app);
		try {
			await basket.checkOrder(this.hash.$.id);
		} catch (err) {
			Htk.Toast.showError(err.message);
		}
		await Hedera.Form.prototype.open.call(this);
	},
	
	onOrderReady(form) {
		if (form.row < 0)
			return;
		
		if (form.$.method != 'PICKUP') {
			Vn.Node.show(this.$.address);
			Vn.Node.setText(this.$.method, _('Agency'));
		} else {
			Vn.Node.hide(this.$.address);
			Vn.Node.setText(this.$.method, _('Warehouse'));
		}

		var total = form.$.taxableBase + form.$.tax;
		
		if (total === null)
			total = 0;

		var credit = form.$.credit;
		var debt = form.$.debt;

		var totalDebt = debt + total;
		var exceededCredit = totalDebt - credit;
		var creditExceededCond = exceededCredit > 0;
			
		if (creditExceededCond)
			Htk.Toast.showWarning(
				_('You have exceeded your credit.'));

		this.$.debt.value = debt;
		this.$.totalDebt.value = totalDebt;
		this.$.totalAmount.value = totalDebt;
		this.$.creditExcess.value = exceededCredit;
		this.$.excessAmount.value = exceededCredit;
		
		this.$.payAmount.value = 'ALL';
		
		if (credit > 0) {
			this.$.creditInfo.style.display = 'table-row';

			if (creditExceededCond) {
				this.$.amountSelector.style.display = 'block';
				this.$.exceededInfo.style.display = 'table-row';
				this.$.payAmount.value = 'EXCEEDED';
			}
		}
		
		var methods = [];
		let selectedMethod;
		
		if (totalDebt <= 0) {
			methods = ['balance'];
			selectedMethod = 'BALANCE';
		} else {
			methods = ['card', 'transfer', 'later'];

			if (!creditExceededCond) {
				methods.push('credit');
				selectedMethod = 'CREDIT';
			} else
				selectedMethod = 'CARD';
		}
		
		for (var i = 0; i < methods.length; i++)
			this.$[`${methods[i]}Method`].style.display = 'block';
		
		this.$.payMethod.value = selectedMethod;
	},
	
	onPayMethodChange(payMethod) {
		var id = this.displayedInfo;

		if (id)
			Vn.Node.removeClass(this.$[id], 'selected');

		switch (payMethod.value) {
			case 'BALANCE':
				id = 'balanceMethod';
				break;
			case 'CREDIT':
				id = 'creditMethod';
				break;
			case 'CARD':
				id = 'cardMethod';
				break;
			case 'TRANSFER':
				id = 'transferMethod';
				break;
			default:
				id = null;
		}

		this.displayedInfo = id;
		
		if (id)
			Vn.Node.addClass(this.$[id], 'selected');
	},
	
	onModifyClick() {
		window.history.back();
	},
	
	async onConfirmClick() {
		Vn.Node.disableInputs(this.node);
		try {
			await this.conn.execQuery(
				'CALL myOrder_confirm(#id)',
				this.$.params.$
			);
			Hedera.Basket.unload();
			this.$.successDialog.show();
		} finally {
			Vn.Node.disableInputs(this.node, false);
		}
	},

	async onDialogResponse() {
		if (this.$.payMethod.value === 'CARD') {
			if (this.$.payAmount.value === 'EXCEEDED')
				var payAmount = this.$.excessAmount.value;
			else
				var payAmount = this.$.totalAmount.value;
		
			var tpv = new Hedera.Tpv({
				conn: this.conn,
				hash: this.hash
			});
			await tpv.pay(payAmount, this.$.order.companyFk);
		} else
			this.hash.setAll({form: 'ecomerce/orders'});
	}
});