#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <string>
#include <algorithm>    // transform

using namespace std;

struct dalok
{
    int ado, perc, mp;
    string ea_cim;
};

void kiir(int sorszam, string szoveg)
{
    cout << "-------------------------------------------------------------------" << endl;
    cout << sorszam << ". feladat - " << szoveg << endl;
    cout << "-------------------------------------------------------------------" << endl;
}

void F1(vector<dalok> &m)
{
    kiir(1,"Adatbeolvasás");
    ifstream fbe;
    fbe.open("musor.txt");
    int zsz;
    string sor;
    dalok temp;
    getline(fbe,sor);
    zsz=atoi(sor.c_str());
    cout << zsz << endl;
    while(fbe>>temp.ado&&fbe>>temp.perc&&fbe>>temp.mp&&getline(fbe,sor))
    {
        sor=sor.substr(1,sor.length());     // itt az elején van egy szóköz, azt leszedjük
        temp.ea_cim=sor;
        m.push_back(temp);
    }
    /*
    cout << "Vektor mérete: " << m.size() << endl;
    for(auto e:m)
    {
        cout << e.ado << " " << e.perc << " " << e.mp << " " << e.ea_cim << endl;
    }
    */
    fbe.close();
}

void F2(vector<dalok> m)
{
    kiir(2,"Dalok száma az egyes adókon");
    map<int,int> zene_db;
    for(int i=1;i<4;i++) zene_db[i]=0;

    for(auto e:m)
    {
        zene_db[e.ado]++;
    }
    for(int i=1;i<4;i++) printf("%d. adón: %d db zeneszám.\n",i,zene_db[i]);
}

void F3(vector<dalok> m)
{
    kiir(3,"Eltelt idő az első és utolsó E.C. dal között (1. adó)");
    int eltelt_ido=0, elso, utolso;
    string keres="Eric Clapton", eloado;
    dalok e;
    bool eloszor=true;
    for(int i=0;i<m.size();i++)
    {
        e=m[i];
        eloado=e.ea_cim.substr(0,keres.length());
        if(e.ado==1 && eloado==keres)
        {
            if(eloszor)
            {
                elso=i;
                eloszor=false;
            }
            else
            {
                utolso=i;
            }
        }
    }
    for(int i=elso;i<utolso+1;i++)
    {
        e=m[i];
        if(e.ado==1) eltelt_ido+=e.perc*60+e.mp;
    }
    printf("Eltelt idő: %d mp, ",eltelt_ido);
    printf("azaz %d óra ",eltelt_ido/3600);
    printf("%d perc %d másodperc\n",eltelt_ido%3600/60,eltelt_ido%3600%60);
}

void F4(vector<dalok> m)
{
    kiir(4,"Omega:Legend hol ment, és mi szólt a többi adón");
    map<int,string> utolsok;
    for(int i=1;i<4;i++) utolsok[i]="";
    string keres="";
    int i=0, ado;
    while(keres!="Omega:Legenda")
    {
        keres=m[i].ea_cim;
        ado=m[i].ado;
        utolsok[m[i].ado]=m[i].ea_cim;
        i++;
    }
    cout << "Az Omega:Legenda a(z) " << ado << ". csatornán ment" << endl;
    cout << "Közben a másik csatornákon:" << endl;
    for(int i=1;i<4;i++)
    {
        if(i!=ado) cout << "\t" << i << ". csatornán: " << utolsok[i] << endl;
    }
}

void F5(vector<dalok> m)
{
    kiir(5,"Melyik dalokról lehet szó (ismert részlet)");
    int x;
    string keres, ec;
    cout << "Olvasható részlet: ";
    cin >> keres;

    ofstream fki;
    fki.open("keres.txt");
    fki << keres << endl;
    for(auto e:m)
    {
        ec=e.ea_cim;
        transform(ec.begin(), ec.end(), ec.begin(), ::tolower);
        x=0;
        for(int i=0;i<ec.length();i++)
        {
            if(keres[x]==ec[i] && x<keres.length())
                x++;
        }
        if(x==keres.length())
        {
            fki << e.ea_cim << endl;            // hogy az eredeti előadó:cím szöveget írjuk ki
        }
    }
    fki.close();
}

void F6(vector<dalok> m)
{
    kiir(5,"Új műsor szerkezet - új műsoridő");
    int ora=1, dal;
    int hirek=3*60, bevezeto=1*60;
    int ido=hirek, holtido;
    for(auto e:m)
    {
        if(e.ado==1)
        {
            dal=bevezeto+e.perc*60+e.mp;
            if(ido+dal>ora*3600)
            {
                holtido=ora*3600-ido;
                ido+=(holtido+hirek+dal);
                ora++;
            }
            else
            {
                ido+=dal;
            }
        }
    }
    cout << "1. rádió - Adás vége az új műsorszerkezetben: ";
    printf("%d:%d:%d\n\n",ido/3600,ido%3600/60,ido%3600%60);
}

int main()
{
    setlocale(LC_ALL,"");

    vector<dalok> musor;
    F1(musor);
    F2(musor);
    F3(musor);
    F4(musor);
    F5(musor);
    F6(musor);

    return 0;
}
