//-------------------------------------------------------
// PbO Example demonstrating the use of nested and
// 		distributed choices
//
// Written by: Quinn Hsu
// Exposed three discount percentages
// Exposed whether discounts should be applied
//-------------------------------------------------------

#include <iostream>
#include <string.h>

using namespace std;

class Item {
		string name;
		double value;
	
	public:
		Item(string, double);
		string getName() { return name; }
		double getValue() { return value; }
};

// constructor
Item::Item(string my_name, double my_value) {
	name 	= my_name;
	value 	= my_value;
}

int main() {
	const int TERM_WIDTH=80;
	const double TAX = 0.12;
	double DISCOUNT = 0;

	// first reference to the distributed CHOICE discount
	##BEGIN CHOICE discount
		// we can also nest choices
		##BEGIN CHOICE discount_amount=fifty
			discount=0.5;
		##CHOICE discount_amount=thirty
			discount=0.3;
		##CHOICE discount_amount=ten
			discount=0.1;
		##END CHOICE discount_amount
	##END CHOICE discount

	Item item1 = Item("NESTLE Smarties", 2.99);
	Item item2 = Item("TOBLERONE Milk Rose", 4.99);
	Item item3 = Item("Peaceable Kingdom Cupcake Valentine Heart Pack", 8.07);
	
	Item items[] = {item1, item2, item3};
	
	int i;
	double subtotal = 0;
	
	for(i=0; i<3; i++) {
		printf("%s%*.2f\n",items[i].getName().c_str(),(int)(TERM_WIDTH-items[i].getName().length()) ,items[i].getValue());
		subtotal += items[i].getValue();
	}
	
	for(i=0; i<TERM_WIDTH; i++) {
		cout << "-";
	}
	cout << endl;
	
	printf("Subtotal%*.2f\n\n", (int)(TERM_WIDTH-strlen("subtotal")), subtotal);
	printf("Tax%+*.2f\n", (int)(TERM_WIDTH-strlen("tax")), subtotal*TAX);


	// here we reference the discount CHOICE again
	##BEGIN CHOICE discount
		printf("Discount%*.2f\n", (int)(TERM_WIDTH-strlen("discount")), -1*subtotal*discount);
	##END CHOICE discount
	
	for(i=0; i<TERM_WIDTH; i++) {
		cout << "-";
	}
	cout << endl;
	
	printf("Total%*.2f\n", (int)(TERM_WIDTH-strlen("total")), subtotal*(1+(TAX-DISCOUNT)));
	
	return 0;
}

		
	