/* Name:Thanneermalai A/L Udayappan 
   Matric Num: A19EC0171
   
   Name: Ariff Fansuri
   Matric Num: A19EC0194
   
   ASSIGNMENT 3 
*/

#include <iostream>
#include <fstream>
#include <iomanip>

#define NUM_STATE 14
#define NUM_YEAR 10

std::ifstream in("input1.txt");
std::ofstream out("outputA3.txt");

struct dataAcc{
	int numAcc[10];
	std::string state;
	float avg;
};

void displayLine(){
	for(int i=0;i<110;i++){
		out<<"-";
	}
	out<<std::endl;
}

void cal_Avg(dataAcc (&array)[NUM_STATE]){
	int totalSum=0;
	for(int i=0;i<NUM_STATE;i++){
		totalSum = 0;
		for(int j=0;j<NUM_YEAR;j++){
			totalSum+=array[i].numAcc[j];
		}
		array[i].avg = static_cast<float>(totalSum)/NUM_YEAR;
	}
}

void find_HighLow(const dataAcc (&array)[NUM_STATE]){
	int position=array[0].numAcc[0],statePos=0;
	for(int x=0;x<NUM_STATE;x++){
		for(int y=0;y<NUM_YEAR;y++){
			if(position<array[x].numAcc[y]){
				position = array[x].numAcc[y];
				statePos = x;
			}
		}
	}
	out<<"The highest number of road accidents = "<<position<<" at "<<array[statePos].state<<".\n";
}

void readFile(dataAcc (&array)[NUM_STATE]){
		while(in){
		for(int i=0;i<NUM_STATE;i++){
			for(int j=0;j<NUM_YEAR;j++){
				in>>array[i].numAcc[j];
			}
			std::getline(in,array[i].state,'\n');
		}
	}
}

void printArraytoScreen(const dataAcc (&array)[NUM_STATE]){
	for(int x=0;x<NUM_STATE;x++){
		for(int y=0;y<NUM_YEAR;y++){
			std::cout<<array[x].numAcc[y]<<" ";
		}
		std::cout<<array[x].state<<" "<<array[x].avg<<std::endl;
	}
}

void printArraytoFile(const dataAcc (&array)[NUM_STATE]){
	displayLine();
	out<<std::setw(20)<<"STATE";
	for(int t =2006;t<2016;t++){
		out<<std::setw(8)<<t;
	}
	out<<std::setw(10)<<"AVERAGE"<<std::endl;
	displayLine();
	
	for(int x=0;x<NUM_STATE;x++){
		out<<std::setw(20)<<array[x].state;
		for(int y=0;y<NUM_YEAR;y++){
			out<<std::setw(8)<<array[x].numAcc[y];
		}
		out<<std::setw(10)<<array[x].avg<<std::endl;
	}
	displayLine();
	find_HighLow(array);
	displayLine();
}

int main(){
	dataAcc list[NUM_STATE];
	
	readFile(list);
	cal_Avg(list);
	//printArraytoScreen(list);  //prints out output in the console
	printArraytoFile(list);
	in.close();
	out.close();
}
