#include <iostream>     // cout cin parancsok
#include <fstream>      // fájlkezelés
#include <vector>       // vector adattípushoz
#include <string>       // to_string (integer--->string konverzió)
#include <iomanip>      // setfill setw függvények

using namespace std;

struct gepjarmu
{
    int nap;
    string ido;
    string rsz;
    int id;
    int km;
    int ki_be;
};

void F1(vector<gepjarmu> &forg)
{
    ifstream fbe;
    fbe.open("autok.txt");
    gepjarmu temp;
    while(fbe>>temp.nap&&fbe>>temp.ido&&fbe>>temp.rsz&&fbe>>temp.id&&fbe>>temp.km&&fbe>>temp.ki_be)
    {
        forg.push_back(temp);
    }
    fbe.close();
    /*
    for(auto temp:forg)
    {
        cout << temp.nap << " " << temp.ido << " " << temp.rsz << " " << temp.id << " " << temp.km << " " << temp.ki_be << endl;
    }
    */
}

void F2(vector<gepjarmu> forg)
{
    cout << "2. feladat" << endl;
    int i=forg.size()-1;            // utolsó vectorbeli elem indexe
    while(forg[i].ki_be!=0)
    {
        i--;
    }
    cout << forg[i].nap << ". nap rendszám: " << forg[i].rsz << endl;
}

void F3(vector<gepjarmu> forg)
{
    cout << "3. feladat" << endl;
    int nap;
    cout << "Nap: ";
    cin >> nap;

    cout << "Forgalom a(z) " << nap << ". napon:" << endl;

    for(auto elem:forg)
    {
        if(elem.nap==nap)
        {
            cout << elem.ido << " " << elem.rsz << " " << elem.id << " ";
            if(elem.ki_be==0) cout << "ki";
            else cout << "be";
            cout << endl;
        }
    }
}

void F4(vector<gepjarmu> forg)
{
    cout << "4. feladat" << endl;
    int ki_db=0;
    int be_db=0;
    for(auto elem:forg)
    {
        if(elem.ki_be==0) ki_db++;
        else be_db++;
    }
    printf("A hónap végén %d autót nem hoztak vissza.\n",(ki_db-be_db));
}

void F5(vector<gepjarmu> forg)
{
    cout << "5. feladat" << endl;
    int megtettkm[10];
    string rendszam;
    bool elso=true;
    int km;
    for(int i=0;i<10;i++)
    {
        rendszam="CEG30"+to_string(i);      // 1 ---> "1"
        for(auto elem:forg)
        {
            if(elem.rsz==rendszam)
            {
                if(elso)
                {
                    km=elem.km;
                    elso=false;
                }
                else
                {
                    megtettkm[i]=elem.km-km;
                }
            }
        }
        elso=true;
    }
    for(int i=0;i<10;i++)
    {
        cout << "CEG30"+to_string(i) << " " << megtettkm[i] << " km" << endl;
    }
}

void F6(vector<gepjarmu> forg)
{
    cout << "6. feladat" << endl;
    int max_km=0;
    bool elso=true;
    int km, max_id;
    for(int i=500;i<600;i++)
    {
        for(auto elem:forg)
        {
            if(elem.id==i)
            {
                if(elso==true)
                {
                    km=elem.km;
                    elso=false;
                }
                else
                {

                    if(elem.km-km>max_km)
                    {
                        max_km=elem.km-km;
                        max_id=i;
                    }
                    elso=true;
                }
            }
        }
        elso=true;
    }
    printf("Leghosszabb út: %d km, személy: %d\n",max_km,max_id);
}

void F7(vector<gepjarmu> forg)
{
    cout << "7. feladat" << endl;
    string rsz;
    cout << "Rendszám: ";
    cin >> rsz;
    ofstream fki;
    fki.open(rsz+"_menetlevel.txt");
    for(auto elem:forg)
    {
        if(elem.rsz==rsz)
        {
            fki << elem.id << "\t" << setfill('0') << setw(2) << elem.nap << "\t" << elem.ido << "\t" << setfill('0') << setw(5) << elem.km << " km\t";
            if(elem.ki_be==1) fki << endl;
        }
    }
    fki.close();
    cout << "Menetlevél kész." << endl;

}

int main()
{
    setlocale(LC_ALL,"");
    vector<gepjarmu> forgalom;
    forgalom.reserve(500);
    F1(forgalom);
    F2(forgalom);
    F3(forgalom);
    F4(forgalom);
    F5(forgalom);
    F6(forgalom);
    F7(forgalom);
    return 0;
}
