#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>


//
int RunSimulation(int noOfCust)
{
	int noOfCustomers=noOfCust;
	int ranTimeSinceLastArrival[500];
	int arrivalTime[500];
	int ranServiceTime[500];
	int timeServiceBegins[500];
	int timeCustomerWaitsInQueue[500];
	int timeServiceEnds[500];
	int timeCustomerSpendsInSystem[500];
	int idleServerTime[500];
	time_t seconds;
	int i=0;

	ranTimeSinceLastArrival[0]=0;



    //this loop generates random service time for each customer in the range 2-6
	for(i=0; i<noOfCustomers; i++)
	{

		if(i!=0)
		{
			time(&seconds);
			srand((unsigned int) seconds);
			ranTimeSinceLastArrival[i]= seconds % 9;
		}
		time(&seconds);
		srand((unsigned int) seconds);
		ranServiceTime[i]= 2+seconds % 5;
	}

	timeServiceBegins[0]=0;
	arrivalTime[0]=0;




    //calculates arrival time, Service End time, Service Begin time for each customer 
	for(i=0; i<noOfCustomers; i++)
	{
		if(i!=0)
		{
			arrivalTime[i] = ranTimeSinceLastArrival[i]+arrivalTime[i-1];
		}
		timeServiceEnds[i] = timeServiceBegins[i]+ranServiceTime[i];

		if(i!=0)
		{
			timeServiceBegins[i] = (arrivalTime[i]<timeServiceEnds[i-1])? timeServiceEnds[i-1]:arrivalTime[i];
		}

	}

	timeCustomerWaitsInQueue[0]=0;


    //calculates wait in Queue time for each customer 
	for(i=0; i<noOfCustomers; i++)
	{
		if(i!=0)
		{
			if((timeServiceEnds[i-1]-arrivalTime[i])<0)
			{
				timeCustomerWaitsInQueue[i]=0;
			}
			else
			{
				timeCustomerWaitsInQueue[i]=timeServiceEnds[i-1]-arrivalTime[i];
			}
		}
	}


    //calculates the time customer spends in system
	for(i=0; i<noOfCustomers; i++)
	{
		timeCustomerSpendsInSystem[i]=ranServiceTime[i]+timeCustomerWaitsInQueue[i];
	}

	idleServerTime[0]=0;

    //calculates idle server time for each customer
	for(i=0; i<noOfCustomers; i++)
	{
		if(i!=0)
		{
			if((arrivalTime[i]-timeServiceEnds[i-1])<0)
			{
				idleServerTime[i]=0;
			}
			else
			{
				idleServerTime[i]=arrivalTime[i]-timeServiceEnds[i-1];
			}
		}
	}




    //Display the output header

	printf("\n\n\n timeSinceLast \t arrivaltime \t servicetime \t timeServiceBegan \t timeCustWaitinQ \t timeServiceEnds \t timeSpentInSystem \t idleServerTime");





	for(i=0; i<noOfCustomers; i++)
	{

    //Display ith customer simulation details

		printf("\n %d \t %d \t %d \t %d \t %d \t %d \t %d \t %d ",
		ranTimeSinceLastArrival[i],arrivalTime[i], ranServiceTime[i], timeServiceBegins[i], 
		timeCustomerWaitsInQueue[i], timeServiceEnds[i], timeCustomerSpendsInSystem[i], idleServerTime[i]);
	}
}
int main()
{

	int noOfCust;
	int noOfLoops;
	int i=0;


    //Read the number of customers from user
	
	printf("\n Enter no of customers\n");   
	scanf("%d", &noOfCust);



    //Read the number of simulation from user

	printf("\n Enter no of simulation\n");
	scanf("%d", &noOfLoops);



	for(i=0; i<noOfLoops; i++)
	{

    //Run Simulation for ith user

		RunSimulation(noOfCust);
	}




    //function to hold the output on screen

	getch();
}


