#include <iostream>
#include <fstream>
#include <cstdlib>
#include <time.h>
#include <string>

using namespace std;

struct egyigeny{

    int ora, perc, mperc, csapat, indulszint, celszint; ///indokolt lehet a tömb, de ez így beszédesebb

}igeny[100];

int szintdb, csapatdb, igenydb;

bool liftezik(int csapat); ///Ha a csapat liftezik, akkor igaz értékkel tér vissza


int main()
{
    setlocale(LC_ALL, "hun");
    ///1. feladat
    ifstream be;
    be.open("igeny.txt");
    if(be.fail()) {

        cout << "A fájl nem nyitható meg";
        cin.get();
        exit(-1);
    }
    be >> szintdb >> csapatdb >> igenydb;

    int i=0;
    while(be >> igeny[i].ora >>  igeny[i].perc >> igeny[i].mperc >> igeny[i].csapat >> igeny[i].indulszint >> igeny[i].celszint){
        i++;
    }
    be.close();

    ///2. feladat
    int kezdoszint;
    cout << "2. feladat" << endl;
    cout << "Adja meg a lift indulási szintjét 0 és " << szintdb << " között: ";
    cin >> kezdoszint;

    ///3. feladat
    cout << "3. feladat" << endl;
    cout << "A lift a " << igeny[igenydb-1].celszint << ". szinten áll az utolsó igény teljesítése után." << endl;

    ///4. feladat
    cout << "4. feladat" << endl;

    int minszint=szintdb, maxszint=0;
    for(i=0; i<igenydb; i++) {
        if(igeny[i].indulszint<minszint) minszint=igeny[i].indulszint;
        if(igeny[i].celszint<minszint) minszint=igeny[i].celszint;
        if(igeny[i].indulszint>maxszint) maxszint=igeny[i].indulszint;
        if(igeny[i].celszint>maxszint) maxszint=igeny[i].celszint;
    }
    cout << "A legalacsonyabb szint: " << minszint << endl;
    cout << "A legmagasabb szint: " << maxszint << endl;

    ///5. feladat
    cout << "5. feladat" << endl;
    int felutassal=0, felutasnelkul=0;
    ///utassal (a kezdö szintröl biztosan utas nelkül megy, ha egyáltalán az nem az elsö igény induló szintje)
    for(i=0; i<igenydb; i++) {
        if(igeny[i].indulszint<igeny[i].celszint) felutassal++; ///ha a célszint nagyobb, mint az induloszint
    }
    ///utas nélkül
    if(kezdoszint<igeny[0].indulszint) felutasnelkul++;
    for(int i=0; i<igenydb-1; i++) {
        if(igeny[i].celszint<igeny[i+1].indulszint) felutasnelkul++; ///ha a célszint kisebb, mint a következő indulószintje
    }
    cout << "A lift " << felutassal << " alkalommal megy felfelé utassal és " << felutasnelkul << " alkalommal utas nélkül." << endl;

    ///6. feladat
    cout << "6. feladat" << endl;
    cout << "Azok a csapatok, akik nem hasznaálják a liftet: ";
    for(i=1; i<=csapatdb; i++) {

        if(!liftezik(i)) {
            cout << i << " ";
        }

    }
    cout << endl;

    ///7. feladat
    cout << "7. feladat" << endl;
    srand (time(NULL));
    int egycsapat = rand()% csapatdb+1;
    //egycsapat=3; //teszthez
    cout << "A csapat, amelyet vizsgálunk: " << egycsapat << endl;
    ///egyszerüség kedvéért összegyüjtjük a vizsgált csapat haladását egy tömbbe
    int csapatut[igenydb][2];
    int j=0;
    for(int i=0; i<igenydb; i++) {
        if(igeny[i].csapat==egycsapat) {
            csapatut[j][0]=igeny[i].indulszint;
            csapatut[j][1]=igeny[i].celszint;
            j++;
        }
    }
    ///j tartalmmazza, hogy az adott csapatnak hány útja volt
    bool csal=false;
    for(int i=0; i<j-1; i++) {

            if(csapatut[i][1]!=csapatut[i+1][0]) {
                cout << "A csapat a " << csapatut[i][1] << ". és " << csapatut[i+1][0] << ". szint között csalt." << endl;
                csal=true;
            }

    }
    if(!csal) cout << "Nem bizonyítható szabálytalanság" << endl;
    /* csak teszt
    for(int i=0; i<j; i++) {

            cout << csapatut[i][0] << " " ;
            cout << csapatut[i][1] << endl;

    }
    */

    ///8. feladat
    cout << "8. feladat" << endl;
    ofstream ki;
    ki.open("blokkol.txt");
    if(ki.fail()){

        cout << "Hiba a fájl megnyitásakor.";
        cin.get();
        exit(-1);

    }
    string szoveg, feladatkod;
    for(i=0; i<igenydb; i++) {
        if(igeny[i].csapat==egycsapat) {

            ki << "A befejezés ideje: " << igeny[i].ora << ":" << igeny[i].perc << ":" << igeny[i].mperc << endl;
            cout << "Az előző munka eredménye: ";
            cin >> szoveg;
            ki << "Sikeresség: " << szoveg << endl;
            ki << "-----" << endl;
            ki << "Indulási emelet: " << igeny[i].indulszint << endl;
            ki << "Célemelet: " << igeny[i].celszint<< endl;
            cout << "A következő feladat kódja: ";
            cin >> feladatkod;
            ki << "Feladatkód: " << feladatkod << endl;
        }
    }
    if(!liftezik(egycsapat)) {
        ki << "A " << egycsapat << ". csapat nem használta a liftet." << endl;
        cout << "A " << egycsapat << ". csapat nem használta a liftet." << endl;
    }
    ki.close();
    cin.get();
    return 0;
}

bool liftezik(int csapat){
    int i=0;
    bool van=false;
    while(!van && i<igenydb){
        if(igeny[i].csapat==csapat) van=true;
        i++;
    }
    return van;
}
