#include <string>
#ifndef CLASS_H
#define CLASS_H

using namespace std;

class User
{
	string firstname;
	string lastname;
	string username;
	string password;
	string un;
	string pw;
	
	public:
		void registerUser();	
		
		bool loginUser();
};
//Base class
class AlaCarte
{
	public:
		string name;
		int code;
		int amount;
		double price, total_price;
		
		AlaCarte(){}

		
		//Runtime polymorhpism
		virtual double calc();
		// << operator overload
		friend ostream &operator<< (ostream &output, const AlaCarte &list);
		// += operator overload
		AlaCarte operator +=(AlaCarte &t)
		{
			AlaCarte sum;
		
			sum.total_price += t.price;
			
			return sum;
		}
		
		
};

//Derived classes
class Set : public AlaCarte
{
	private:
		string s1, s2, s3;
	    
	public:
		string set;
		
		Set(){}
		
		Set(string s, string a, string b, string c, double k)
		{ 
			set = s;
			s1 = a; s2 = b; s3 = c;
			price = k;
		
		}
		void getDescriptionSet (Set);
		
		//Runtime polymorhpism
		double calc();
			
};

class Food : public AlaCarte
{	
	public:
		Food(string n, char c, double p)
		{
			name = n; code = c; price = p;
		}
};

class Dessert : public AlaCarte
{
	public:
		Dessert(string n, char c, double p)
		{
			name = n; code = c; price = p;
		}
};

class Drink : public AlaCarte
{
	public:
		Drink(string n, char c, double p)
		{
			name = n; code = c; price = p;
		}
};


#endif

