// stats.cc: the Statistics class.

#include <cstdio>
#include <iostream.h>
#include "main.h"
#include "car.h"
#include "carqueue.h"
#include "pump.h"
#include "pstand.h"
#include "stats.h"

void Statistics::accumBalk (double litres) {
   balkingCustomers += 1;
   totalLitresMissed += litres;
}

void Statistics::accumSale (double litres) {
   customersServed += 1;
   totalLitresSold += litres;
}

void Statistics::accumServiceTime (double interval) {
   totalServiceTime += interval;
}

void Statistics::accumWaitingTime (double interval) {
   totalWaitingTime += interval;
}

void Statistics::countArrival () {
   totalArrivals += 1;
}

// printHeaders: print column titles for the statistics summaries.
void Statistics::printHeaders () {
   cout << "  Current Total  NoQueue Car->Car Average Number  Average  Pump    Total  Lost\n";
   cout << "    Time   Cars Fraction   Time   Litres  Balked    Wait  Usage   Profit Profit\n";
   for (int i = 0; i < 79; i++)
      cout << "-";
   cout << "\n";
}

void Statistics::snapshot () {
   printf ("%8.0f", sim->simulationTime);
   printf ("%7d", totalArrivals);
   printf ("%8.3f", sim->carQueue->getEmptyTime()/sim->simulationTime);
   
   if (totalArrivals > 0) {
      printf ("%9.3f", sim->simulationTime/totalArrivals);
      printf ("%8.3f", (totalLitresSold + totalLitresMissed) / totalArrivals);
   }
   else
      printf ("  Unknown Unknown");
   
   printf ("%7d", balkingCustomers);
   if (customersServed > 0)
      printf ("%9.3f", totalWaitingTime/customersServed);
   else
      printf ("  Unknown");
   
   printf ("%7.3f", totalServiceTime
         / (sim->pumpStand->getNumberOfPumps() * sim->simulationTime));
   printf ("%9.2f", totalLitresSold * sim->profit
         - sim->pumpCost * sim->pumpStand->getNumberOfPumps());
   printf ("%7.2f", totalLitresMissed * sim->profit);
   
   cout << "\n";
}

