Source: ShoppingCart.js

/**
 * Copyright Mind Powered Corporation 2020
 * 
 * https://mindpowered.dev/
 */

const maglev = require('@mindpowered/maglev');
const shoppingcart = require('../lib/shoppingcart.js');

/**
 * An Shopping Cart Library
 * Add items and show a summary at checkout
 */
class ShoppingCart {
	constructor() {
		let bus = maglev.maglev.MagLev.getInstance('default');
		let lib = new shoppingcart.shoppingcart.ShoppingCart(bus);
	}

	/**
	 * Create a new shopping cart
	 * @param {string} storeId 
	 * @return {Promise} cartId Promise will resolve to type string.
	*/
	Create(storeId) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [storeId];
		let ret = jsbus.call('ShoppingCart.Create', args);
		return ret;
	}

	/**
	 * Add an item to a cart
	 * @param {string} cartId 
	 * @param {string} itemId 
	 * @param {number} qty quantity
	 * @param {number} price price
	 * @return {Promise} cart item index Promise will resolve to type number.
	*/
	AddItem(cartId, itemId, qty, price) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [cartId, itemId, qty, price];
		let ret = jsbus.call('ShoppingCart.AddItem', args);
		return ret;
	}

	/**
	 * Get a list of items in a cart
	 * @param {string} cartId 
	 * @return {Promise} array of item objects Promise will resolve to type array.
	*/
	ListItems(cartId) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [cartId];
		let ret = jsbus.call('ShoppingCart.ListItems', args);
		return ret;
	}

	/**
	 * Remove an item from a cart
	 * @param {string} cartId 
	 * @param {number} idx item index
	*/
	RemoveItem(cartId, idx) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [cartId, idx];
		jsbus.call('ShoppingCart.RemoveItem', args);
	}

	/**
	 * Update cart item quantity
	 * @param {string} cartId 
	 * @param {number} idx item index
	 * @param {number} qty quantity
	*/
	UpdateQty(cartId, idx, qty) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [cartId, idx, qty];
		jsbus.call('ShoppingCart.UpdateQty', args);
	}

	/**
	 * Count the items in a cart
	 * @param {string} cartId 
	 * @return {Promise} number of items Promise will resolve to type number.
	*/
	CountItems(cartId) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [cartId];
		let ret = jsbus.call('ShoppingCart.CountItems', args);
		return ret;
	}

	/**
	 * Get a summary for a shopping cart
	 * @param {string} cartId 
	 * @return {Promise} summary Promise will resolve to type object.
	*/
	GetCartSummary(cartId) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [cartId];
		let ret = jsbus.call('ShoppingCart.GetCartSummary', args);
		return ret;
	}

	/**
	 * Clear all items from a shopping cart
	 * @param {string} cartId 
	*/
	Clear(cartId) {
		let jsbus = maglev.maglev.MagLevJs.getInstance('default');
		let args = [cartId];
		jsbus.call('ShoppingCart.Clear', args);
	}

}
module.exports = ShoppingCart;