/* stats.cpp
 *
 * Keep track of statistics.  Currently, we track:
 *
 *    average trip time
 */


#include <iostream.h>
#include "stats.H"
#include "person.H"
#include "main.H"


void
Statistics::report_arrival( Person *pers )
{
    num_trips++;
    total_trip_time += current_time - pers->start_time;

    if (text_output) {
	cout << current_time <<": Person terminates trip floor ";
	pers->source_floor->print();
	cout << " -> floor ";
	pers->dest_floor->print();
	cout << " in ";
	cout << current_time - pers->start_time << " seconds\n";
    }
}

void
Statistics::report_impatient_departure( Person *pers )
{
    num_impatient_departures++;
    num_impatients++;

    if (text_output) {
	cout << current_time <<": Impatient Person " << pers->person_num;
	cout << " gives up and takes the stairs\n";
    }
}

void
Statistics::periodic_report()
{
    if (num_trips == 0) {
	cout << "\rTime: " << current_time;
	cout << "  No trips reported";
    } else {
	cout << "\rTime: " << current_time;
	cout << "  Completed trips: " << num_trips;
	cout << "  Average trip time: " << total_trip_time / (float) num_trips;
    }

    cout.flush();
}


void
Statistics::final_report()
{
    if (num_trips == 0) {
	cout << "Time: " << current_time;
	cout << "  No trips reported\n";
	cout << "  Number of impatient people who left: " << num_impatient_departures << "\n";
	cout << "  Average number of impatient people who left: "
	     << (float)num_impatient_departures/(float)num_impatients;
	cout << "\n";
	  
    } else {
	cout << "Time: " << current_time;
	cout << "  Completed trips: " << num_trips;
	cout << "  Average trip time: " <<total_trip_time/(float)num_trips;
	cout << "\n";
	cout << "  Number of impatient people who left: " << num_impatient_departures << "\n";
	cout << "  Number of impatient people: " << num_impatients << "\n";
	cout << "  Percentage of impatient people who left: "
	     << (float)num_impatient_departures/(float)num_impatients *100;
	cout << "\n";
    }
}
