#include <fstream>
#include <iostream>
#include "Employee.h"
using namespace std;

char printMenu();
void addEmployee(Employee** emplist,int* size);
void editEmployee(Employee** emplist,int size,string id);
void displayEmployee(Employee** emplist,int size,string id);
void displayAll(Employee** emplist,int size);
void readInputFile(Employee** emplist,int* size);
int main() {
    Employee** emplist = new Employee*[1000];
    int size = 0;
    readInputFile(emplist,&size);
    char c = '*';
    while(c != 'Q'){
        c = printMenu();
        if(c=='A'||c=='a'){
           addEmployee(emplist,&size);
        }
        if(c=='E'||c=='e'){
            cout << "Enter ID :";
           string id;
           cin >>id;
            editEmployee(emplist,size,id);
        }
        if(c=='P'||c=='p'){
           cout << "Enter ID :";
           string id;
           cin >>id;
            displayEmployee(emplist,size,id);
        }
        if(c=='L'||c=='l'){
           displayAll(emplist,size);
        }
        if(c=='q'){
            c ='Q';
        }
    }
}
void addEmployee(Employee** emplist,int* size){
   string str;
   char ch;
   double sal;
  
    cout << "Enter ID :";
    cin >>str;
    Employee* emp = new Employee(str);
  
    cout << "Enter Position :";
    cin >>str;
    emp->setPosition(str);
  
   cout << "Enter Number(MMDDYY.N) :";
    cin >>ch;
   emp->setNumber(ch);
  
   cout << "Enter Date of Hours :";
    cin >>sal;
   emp->hours(sal);
  
   cout << "Enter PayRate :";
    cin >>sal;
   emp->setPayRate(sal);
  
   cout << "Enter Wages :";
    cin >>sal;
   emp->setWages(sal);
  
   cout << "Enter GrossWages :";
    cin >>sal;
   emp->setGrossWages(sal);
  
    emplist[*size] = emp;
    *size += 1;
}
void editEmployee(Employee** emplist,int size,string id){
  
   for(int i=0;i<size;i++){
       Employee* emp = emplist[i];
       if(id.compare(emp->getID())==0){
           cout << "----------------Current data--------------------"<<endl;
           cout << "ID : "<<emp->getID()<<endl;
           cout << "\tPosition : "<<emp->getPosition()<<endl;
           cout << "\tNumber : "<<emp->getNumber()<<endl;
           cout << "\Hours : "<<emp->getHours()<<endl;
           cout << "\tPayRate : "<<emp->getPayRate()<<endl;
           cout << "\tWages : "<<emp->getPayRate()<<endl;
           cout << "\tGrossWages : "<<emp->getGrossWages()<<endl;
           cout << "-------------------------------------------------"<<endl;
           string str;
           char ch;
           double sal;
          
          
           cout << "Enter New Position :";
           cin >>sal;
           emp->setPosition(sal);
          
           cout << "Enter Number :";
           cin >>ch;
           emp->setNumber(ch);
          
           cout << "Enter Hours :";
           cin >>sal;
           emp->setHours(sal);
          
           cout << "Enter PayRate :";
           cin >>sal;
           emp->setPayRate(sal);
          
           cout << "Enter Wages :";
           cin >>sal;
           emp->setStartWages(sal);
          
           cout << "Enter GrossWages :";
           cin >>sal;
           emp->setGrossWages(sal);
           return;
       }
    }
   cout << "ID : "<<id<<" Not Found!"<<endl;
}
void displayEmployee(Employee** emplist,int size,string id){
  
   for(int i=0;i<size;i++){
       Employee* emp = emplist[i];
       if(id.compare(emp->getID())==0){
           cout << "-------------------------------------------------"<<endl;
           cout << "ID : "<<emp->getID()<<endl;
           cout << "\tPosition : "<<emp->getPosition()<<endl;
           cout << "\tNumber : "<<emp->getNumber()<<endl;
           cout << "\tHours : "<<emp->getHours()<<endl;
           cout << "\tPayRate : "<<emp->getPayRate()<<endl;
           cout << "\tWages : "<<emp->getWages()<<endl;
           cout << "\tGrossWages : "<<emp->getGrossWages()<<endl;
           cout << "-------------------------------------------------"<<endl;
           return;
       }
    }
   cout << "ID : "<<id<<" Not Found!"<<endl;
}
void displayAll(Employee** emplist,int size){
    for(int i=0;i<size;i++){
       cout << "-------------------------------------------------"<<endl;
        Employee* emp = emplist[i];
        cout << "ID : "<<emp->getID()<<endl;
        cout << "\tPosition : "<<emp->getPosition()<<endl;
        cout << "\tNumber : "<<emp->getNumber()<<endl;
        cout << "\tHours : "<<emp->getHours()<<endl;
        cout << "\tPayRate : "<<emp->getPayRate()<<endl;
        cout << "\tWages : "<<emp->getWages()<<endl;
        cout << "\tGrossWages : "<<emp->getGrossWages()<<endl;
        cout << "-------------------------------------------------"<<endl;
    }
}
char printMenu(){
    char choice;
    cout << "\n [A] Add Employee "<< endl;
    cout << " [E] Edit Employee "<< endl;
    cout << " [P] Display Employee "<< endl;
    cout << " [L] Display all "<< endl;
    cout << " [Q] Quit"<< endl;
    cout << "Choose an option :";
    cin >> choice;
    return choice;
}
void readInputFile(Employee** emplist,int* size){
   ifstream infile;
    infile.open("Employee.txt");
   while (!infile.eof()){
        string str;
       char ch;
       double sal;
       infile >>str;
       Employee* emp = new Employee(str);
      
       infile >>sal;
       emp->setPosition(sal);
      
       infile >>ch;
       emp->setNumber(ch);
      
       infile >>sal;
       emp->setHours(sal);
      
       infile >>sal;
       emp->setPayRate(sal);
      
       infile >>Wages;
       emp->setWages(sal);
      
       infile >>sal;
       emp->setGrossWages(sal);
      
       emplist[*size] = emp;
       *size += 1;
    }
    infile.close();
}
