#ifndef _market_h
#define _market_h

#include "sim.h"
#include <queue>
#include <vector>
#include "customer.h"
#include "teller.h"

class Market_Simulation;

class Customer_Arrives:public event
{
public:
	Customer_Arrives(unsigned long,Customer*,Market_Simulation&);
	void processEvent();
	~Customer_Arrives();
private:
	Customer* this_customer;
	Market_Simulation& market_simulation;
};

class Teller_Becomes_Free: public event
{
public:
	Teller_Becomes_Free(unsigned long,Teller*,Market_Simulation&);
	void processEvent();
	~Teller_Becomes_Free();
private:
	Teller* this_Teller;
	Market_Simulation& market_simulation;
};

class Market_Simulation:public simulation
{
public:
	Market_Simulation();
	void print_statistics();
	Teller* find_free_teller(Customer*);
	Teller* find_least_customer_teller(Customer*);

private:
	int number_of_standard_tellers;
	int number_of_express_tellers;
	int number_of_super_tellers;
	std::vector<Teller> standard_teller_list;
	std::vector<Teller> express_teller_list;
	std::vector<Teller> super_teller_list;
};
#endif


