// Érettségi Kézikönyv 2.0 - (C) Ódor Péter 2023

#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <list>
#include <algorithm>

using namespace std;

struct nezo
{
    string vnev;
    string knev;
    int ferfi;
    int berletes;
};

struct meccs
{
    string datum;
    string kezdes;
    int belepo;
    string tipus;
    int nezoszam;
};

struct belepes
{
    int nezoid;
    int meccsid;
    string idopont;
};

void F1nezo(map<int,nezo> &n)
{

    ifstream fbe;
    fbe.open("nezo.txt");
    nezo t;
    int id;
    while(fbe>>id&&fbe>>t.vnev&&fbe>>t.knev&&fbe>>t.ferfi&&fbe>>t.berletes)
    {
        n[id]=t;
    }
    /*
    for(auto ms:n)
    {
        t=ms.second;
        cout << ms.first << " " << t.vnev << " " << t.knev << " " << t.ferfi << " " << t.berletes << endl;
    }
    */
    fbe.close();
}

void F1meccs(map<int,meccs> &m)
{
    ifstream fbe;
    fbe.open("meccs.txt");
    meccs t;
    t.nezoszam=0;
    int id;
    while(fbe>>id&&fbe>>t.datum&&fbe>>t.kezdes&&fbe>>t.belepo&&fbe>>t.tipus)
    {
        m[id]=t;
    }
    /*
    for(auto ms:m)
    {
        t=ms.second;
        cout << ms.first << " " << t.datum << " " << t.kezdes << " " << t.belepo << " " << t.tipus << endl;
    }
    */
    fbe.close();
}

void F1belepes(vector<belepes> &b)
{
    ifstream fbe;
    fbe.open("belepes.txt");
    belepes t;
    while(fbe>>t.nezoid&&fbe>>t.meccsid&&fbe>>t.idopont)
    {
        b.push_back(t);
    }
    /*
    for(auto bel:b)
    {
        cout << bel.nezoid << " " << bel.meccsid << " " << bel.idopont << endl;
    }
    fbe.close();
    */
}

void sorting_a_vector(vector<string> &r,bool novekvo)
{
    if(novekvo) sort(r.begin(),r.end());
    else sort(r.begin(),r.end(),greater<>());
}

void F2(map<int,meccs> m)
{
    cout << "----------------------------------- 2.feladat -----------------------------------" << endl;
    cout << "Mérkőzések időrendben:" << endl;
    vector<string> datumok;
    for(auto ms:m)
    {
        if(ms.second.tipus=="bajnoki") datumok.push_back(ms.second.datum);
    }
    sorting_a_vector(datumok,true);
    //sort(datumok.begin(),datumok.end());
    ofstream fki;
    fki.open("bajnoki.txt");
    for(auto d:datumok)
    {
        cout << d << endl;
        fki << d <<endl;
    }
    fki.close();
}

void F3(map<int,meccs> m)
{
    cout << "----------------------------------- 3.feladat -----------------------------------" << endl;
    cout << "Utolsó meccsre a jegy ára:" << endl;
    vector<string> datumok;
    for(auto ms:m)
    {
        datumok.push_back(ms.second.datum);
    }
    sorting_a_vector(datumok,false);
    for(auto ms:m)
    {
        if(ms.second.datum==datumok[0])
        {
            cout << ms.second.belepo << " Ft (" << datumok[0] <<")" << endl;
            break;
        }
    }
}

void F4(map<int,meccs> &m,vector<belepes> b)
{
    cout << "----------------------------------- 4.feladat -----------------------------------" << endl;
    cout << "Nézőszámok az egyes meccseken:" << endl;
    vector<pair<string,int>> datum_nezoszam;
    map<string,int> temp;
    for(auto be:b)
    {
        m[be.meccsid].nezoszam++;
    }
    for(auto be:b)
    {
        temp[m[be.meccsid].datum]=m[be.meccsid].nezoszam;
    }
    for(auto items:temp)
    {
        datum_nezoszam.push_back(items);
    }
    sort(datum_nezoszam.begin(),datum_nezoszam.end());
    for(auto elem:datum_nezoszam)
    {
        cout << elem.first << " " << elem.second << endl;
    }
}

void F5(map<int,meccs> m,map<int,nezo> n,vector<belepes> b)
{
    cout << "----------------------------------- 5.feladat -----------------------------------" << endl;
    cout << "Bevétel 2018 szeptemberében jegyeladásból:" << endl;
    int bevetel=0;
    for(int i=0;i<b.size();i++)
    {
        if(n[b[i].nezoid].berletes==0)
        {
            if(m[b[i].meccsid].datum.substr(0,7)=="2018.09") bevetel+=m[b[i].meccsid].belepo;
        }
    }
    cout << bevetel << " Ft" << endl;
}

void F6(map<int,meccs> m,map<int,nezo> n,vector<belepes> b)
{
    cout << "----------------------------------- 6.feladat -----------------------------------" << endl;
    cout << "Kiss Dorina és Varga Zsolt ezeken a meccseken voltak együtt:" << endl;
    vector<string> datum_kiss;
    vector<string> datum_kozos;
    for(int i=0;i<b.size();i++)
    {
        if(n[b[i].nezoid].vnev+" "+n[b[i].nezoid].knev=="Kiss Dorina")
        {
            datum_kiss.push_back(m[b[i].meccsid].datum);
        }
    }
    for(auto datum:datum_kiss)
    {
        for(int i=0;i<b.size();i++)
        {
            if(n[b[i].nezoid].vnev+" "+n[b[i].nezoid].knev=="Varga Zsolt"&&m[b[i].meccsid].datum==datum)
            {
                datum_kozos.push_back(m[b[i].meccsid].datum);
            }
        }
    }
    sort(datum_kozos.begin(),datum_kozos.end());
    for(auto datum:datum_kozos)
    {
        cout << datum << endl;
    }
}

void F7(map<int,meccs> m,map<int,nezo> n,vector<belepes> b)
{
    cout << "----------------------------------- 5.feladat -----------------------------------" << endl;
    cout << "Bevétel a teljes idényben jegyeladásból:" << endl;
}

int main()
{
    setlocale(LC_ALL,"");
    map<int,nezo> nezok;
    map<int,meccs> meccsek;
    vector<belepes> belepesek;
    F1nezo(nezok);
    F1meccs(meccsek);
    F1belepes(belepesek);
    F2(meccsek);
    F3(meccsek);
    F4(meccsek,belepesek);
    F5(meccsek,nezok,belepesek);
    F6(meccsek,nezok,belepesek);
    return 0;
}
