#include<iostream>
#include<time.h>
//#include "lista_polje.h"
#include "lista_pokazivaci.h"
using namespace std;

int upiszaposlenika(){
    cin.ignore();
    int minimalno;
    datrod rodendan;
    int mjesec;
    int d;
    int godina;
    minimalno=0;
    char preime[40];
    bool rdmj=false;
    bool programer;
    bool racunovoda;
    bool cistac;
    bool dostavljac;
    bool kuhar;
    
    do{
         
         cout<<"Morate unjeti minimalno 5 zaposlenika zaposlenih na razlicitim pozicijama!!" << endl;
         do{
             cout <<"Unesite prezime i ime novog zaposlenika (dozvoljeno max 40 znakova): " << endl;
             cin.getline(preime,40);
             }while(strlen(preime)>40);
       
        mjesec=0;
        do{
                        cout <<"Unesite mjesec rodenja zaposlenika(1-12): "; cin >> mjesec;
                        if(mjesec<1 && mjesec>12)
                                    cout <<"Mjesec mora biti u rasponu od 1-12! Ponovite unos!" << endl;
                        }while(mjesec>12 || mjesec<1);
        rodendan.mj=mjesec;  
        d=1; 
       do {
                   cout <<"Unesite dan rodenja zaposlenika(1-31): "; cin >> d;
                   if(mjesec == 2)
                             if(d>28)
                                     while(d>28){
                                                cout <<"U 2 mjesecu moze biti maksimalno 28 dana! Ponovite unos dana! " << endl;
                                        cin >> d;
                                        }
                   else if(d<1 && d>31)
                          cout <<"Dan mora biti u rasponu od 0-31! Ponovite unos!" << endl;
                          } while(d>31 || d<1);
        rodendan.dan=d;
        
        godina=1;
        do{
                          cout <<"Unesite godinu rodenja zaposlenika(1940-1998): "; cin >> godina;
                          if(godina>1998 && godina<1940)
                                         cout <<"Godina mora biti u rasponu od 1940-1998! Ponovite unos!" << endl;
                          }while(godina>1998 || godina<1940);
        rodendan.god=godina;
        
        
        int odabirdmj;
        string radnomjesto;
        
        do{
                    cout<<"Odaberite jedno od ponudenih radnih mjesta!" << endl;
                    cout<<"1. Programer! " << endl;
                    cout<<"2. Racunovoda! " << endl;
                    cout<<"3. Cistac! " <<endl;
                    cout<<"4. Dostavljac! " <<endl;
                    cout<<"5. Kuhar! " << endl;
                    cout<<"----------------------" << endl;
                    cout<<"Vas odabir: "; cin >>odabirdmj;
                    
                    switch(odabirdmj){
                                      case 1: {cout <<"Zaposlenik radi na poziciji programera! " << endl;
                                                             radnomjesto="Programer"; cout<< endl;
                                                             programer=true;
                                                             break;
                                                             }
                                      case 2: {cout<<"Zaposlenik radi na poziciji racunovode! " << endl;
                                                              radnomjesto="Racunovoda"; cout << endl;
                                                              racunovoda=true;
                                                              break;
                                                              }
                                              
                                      case 3: {cout<<"Zaposlenik radi na poziciji cistaca! " << endl;
                                                          radnomjesto="Cistac"; cout<< endl;
                                                          cistac=true;
                                                          break;
                                                          }
                                      case 4: {cout<<"Zaposlenik radi na poziciji dostavljaca! "<< endl;
                                                                radnomjesto="Dostavljac"; cout << endl;
                                                                dostavljac=true;
                                                                break;
                                                                }
                                      case 5: {cout<<"Zaposlenik radi na poziciji kuhara! " << endl;
                                                                radnomjesto="Kuhar"; cout << endl;
                                                                kuhar=true;
                                                                break;
                                                                }
                                      };
                    }while(odabirdmj!=1 && odabirdmj!=2 && odabirdmj !=3 && odabirdmj != 4 && odabirdmj !=5);
        
        InsertL(preime,rodendan,radnomjesto);
        
        cin.ignore();
        }while((programer!=true) || (racunovoda!=true) || (cistac!=true) || (dostavljac!=true) || (kuhar!=true));
        
        return 1;
                }
    
         

radnik pivot(int i, int j) {
       srand(time(NULL));
       int a;
       a= j-i;
       int broj;
       broj = rand()%a + i;
       return RetrieveL(broj);
}
void qsort(int i, int j) {
     int d;
     d=0;
     int t=j-d;
     radnik as = pivot(i,j);
     while (d<t) {
           while (strcmp(RetrieveL(d).oib,as.oib)==1){
                  d++;
                  }
           while (strcmp(RetrieveL(t).oib,as.oib)==-1) {
                 t--;
                 }
           if (strcmp(RetrieveL(d).oib,RetrieveL(t).oib)!=0){
                                                              zamjena(d,t);
                                                              }
           else if (d!=t) {
                d++;
                }      
     }
     if (i<d-1) qsort(i,d-1);
     if (j>d+1) qsort(d+1,j);
}


void razvrstavanje(){
     int i;
     i=0;
     cout <<"Razvrstavanje zaposlenika pomocu quick sorta!" << endl;
     cout << endl;
     qsort(0,EndL()-1);
     while(i<EndL()){
                     cout <<"OIB zaposlenika: " << RetrieveL(i).oib << endl;
                     cout <<"Prezime i ime zaposlenika: " << RetrieveL(i).pre_ime << endl;
                     cout <<"Datum rodenja zaposlenika(d/m/g): " << RetrieveL(i).datum.dan <<"." <<RetrieveL(i).datum.mj <<"."<< RetrieveL(i).datum.god<<"."<< endl;
                     cout <<"Radno mjesto zaposlenika: " << RetrieveL(i).rad_mjesto << endl;
                     i++;
                     }
     }


int bris_oib(){
    int i;
    i=0;
    cin.ignore();
    cout<<"Za brisanje prema OIB-u morate upisati OIB zaposlenika! " << endl;
    char brisi[12];
    cout<<"Unesite OIB: "; cin.getline(brisi,12);
    while(i<EndL()){
                    if(strcmp(RetrieveL(i).oib,brisi)==0){
                                                          DeleteL(i);
                                                          return 1;
                                                          }
                    i++;
                    }
    return 0;
    }
    
int bris_rad_mj(){
    int i;
    i=0;
    cin.ignore();
    cout<<"Za brisanje prema radnom mjestu morate unjeti tocan naziv radnog mjesta! " << endl;
    string brisi;
    cout<<"Unesite jedno od radnih mjesta:( Programer )|( Racunovoda )|( Cistac )|( Dostavljac )|( Kuhar )! " << endl;
    cout<<"Vas odabir: "; 
    cin >> brisi;
    while(i<EndL()){
                    if(RetrieveL(i).rad_mjesto==brisi){
                                                          DeleteL(i);
                                                          return 1;
                                                          }
                    i++;
                    }
    return 0;
    }


int main(){
    int izbor;
    bool ima;
    InitL();
    do{
       cout << endl;
        cout <<"<<<<<<<<<< IZBORNIK   >>>>>>>>>>" << endl;
        cout <<"Odaberite jednu od ponudenih opcija: " << endl;
        cout <<"1. Unos novog zaposlenika! " << endl;
        cout <<"2. Sortiranje zaposlenika prema OIB-u! " << endl;
        cout <<"3. Pretrazivanje i ispis zaposlenika sa istim horoskopskim znakom kao i ja! " << endl;
        cout <<"4. Brisanje zaposlenika prema OIB-u " << endl;
        cout <<"5. Brisanje prema radnom mjestu!" << endl;
        cout <<"0. Izlaz iz programa! " << endl;
        cout <<"   Vas odabir: "; cin >> izbor;
        cout <<"-------------------------" << endl; 
        
        switch(izbor){
                      case 1:if(upiszaposlenika()){
                                                     cout <<"Uspjesno ste unjeli zaposlenika!" << endl;
                                                     
                                                     ima=true;
                                                     break;
                                                     }
                             else{ 
                                  cout <<"Nesupjeli unos zaposlenika, probajte ponovo!" << endl;
                                  }
                                  break;
                      case 2:if(ima!=1){
                                        cout<<"Nema unesenih zaposlenika!! " << endl;
                                        break;
                                        }
                             else{
                                        razvrstavanje(); 
                                        break;
                                        }
                                        
                      case 4:if(bris_oib()){
                                            cout <<"Uspjesno ste obrisali zaposlenika! " << endl;
                                            break;
                                            }
                             else{
                                 cout <<"Brisanje nije uspjelo! " << endl;
                                 break;
                                 }
                      case 5:if(bris_rad_mj()){
                                               cout<<"Uspjesno ste obrisali zaposlenika! " << endl;
                                               break;
                                               }
                             else{
                                 cout <<"Brisanje nije uspjelo! " << endl;
                                 break;
                                 }
                      
                                                     
                      
                      
                      };
        }while(izbor!=0);
    system("pause");
    return 0;
    }