#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>

using namespace std;

struct egyzeneszam{

    int sorszam, perc, mperc;
    string eloado, dal;


}zeneszam[1000];

int db;

int zeneszamhossza(egyzeneszam zeneszam) {
///A zeneszám hosszát adja meg másodpercben
    return zeneszam.perc*60+zeneszam.mperc;

}

int zeneszamindex(int ado, int ido) {
///Megadja, hogy az adott időponthoz melyik indexű szám tartozik a fájlban
    int i=0;
    int aktido=0;
    while(aktido<=ido && i<db) {

       if(zeneszam[i].sorszam==ado) {

         aktido+=zeneszamhossza(zeneszam[i]);
       }
       i++;

    }
    return i-1;
}

int csatornaszam(string eloado, string dal) {
/// A dalhoz tartozó csatornaszámmot adja meg
    int i=0;
    bool van=false;
    while(!van && i<db) {

        if(zeneszam[i].eloado==eloado && zeneszam[i].dal==dal) van=true;
        i++;
    }
    if(van) return zeneszam[i-1].sorszam;
    else return 0;
}

void ido(int teljesido) {
/// Az időt írja ki óra:perc:mperc formátumban
 cout << teljesido/3600 << ":" << teljesido%3600/60 << ":" << teljesido%60 << endl;

}

int main()
{
    setlocale(LC_ALL, "hun");
    ///1. feladat: Beolvasás
    ifstream be;
    be.open("musor.txt");
    if(be.fail()) {

        cout << "A fájl nem nyitható meg";
        cin.get();
        exit(-1);
    }
    be >> db;    ///A darabszám beolvasása
    int i=0;
    while(!be.eof()) {
       be >> zeneszam[i].sorszam >> zeneszam[i].perc >> zeneszam[i].mperc;
       string sor;                          ///Az előadó tárolása
       string sor2;                         ///A dal tárolása
       getline(be,sor,':');                 ///Az előadó beolvasása. A : karakterig tart az előadó
       zeneszam[i].eloado=sor.erase(0,1);   ///A szóközt levágjuk
       getline(be,sor2);                    ///A dal beolvaása
       zeneszam[i].dal=sor2;
       i++;
    }

    be.close();
        ///2. feladat:
    cout << "2. feladat" << endl;
    cout << "Az egyes adókon lejátszott dalok száma: " << endl;
    int s1=0, s2=0,s3=0;
    for(i=0; i<db; i++) {

        if(zeneszam[i].sorszam==1) s1++;
        if(zeneszam[i].sorszam==2) s2++;
        if(zeneszam[i].sorszam==3) s3++;

    }

    cout << "1. adó: " << s1 << endl;
    cout << "2. adó: " << s2 << endl;
    cout << "3. adó: " << s3 << endl;

    ///3. feladat
    cout << "3. feladat" << endl;
    cout << "Az első és utolsó Eric Clapton szám közötti idő az 1. adón: " << endl;
    int elso, utolso;
    bool van=false;
    i=0;
    while(!van && i<db) {
        if(zeneszam[i].sorszam==1 && zeneszam[i].eloado=="Eric Clapton") van=true;
        ++i;
    }
              ///Az első Eric Clapton szám a fájlban
    elso=i-1;

    van=false;
    i=db;
    while(!van && i!=0) {
        if(zeneszam[i].sorszam==1 && zeneszam[i].eloado=="Eric Clapton") van=true;
        --i;
    }
    utolso=i+1;           ///Az utolsó Eric Clapton szám a fájlban


    int teljesido=0;
    for(i=elso; i<utolso; i++) {

        if(zeneszam[i].sorszam==1) teljesido+=zeneszamhossza(zeneszam[i]);

    }

    ido(teljesido);

    ///4. feladat
    cout << "4. feladat" << endl;
    cout << "Az Omega:Legenda a(z) " << csatornaszam("Omega","Legenda") << ". számú csatornán hallható." << endl;

    teljesido=0;  //Az eddig eletelt idő
    i=0;
    while(zeneszam[i].dal!="Legenda") {

        if(zeneszam[i].sorszam==csatornaszam("Omega","Legenda")) teljesido+=zeneszamhossza(zeneszam[i]);
        i++;
    }
    cout << "Az 1. csatornán hallható szám: " << zeneszam[zeneszamindex(1,teljesido)].eloado << ":" << zeneszam[zeneszamindex(1,teljesido)].dal << endl;
    cout << "Az 2. csatornán hallható szám: " << zeneszam[zeneszamindex(2,teljesido)].eloado << ":" << zeneszam[zeneszamindex(2,teljesido)].dal << endl;
    cout << "Az 3. csatornán hallható szám: " << zeneszam[zeneszamindex(3,teljesido)].eloado << ":" << zeneszam[zeneszamindex(3,teljesido)].dal << endl;

    ///5. feladat: dal keresése
    cout << "5. feladat" << endl;
    string keres;
    cout << "Adja meg a keresett számból a karaktereket: ";
    cin >> keres;

    ofstream ki;
    ki.open("keres.txt");
    if(ki.fail()) {

        cout << "A fájl nem nyitható meg";
        cin.get();
        exit(-1);
    }
    ki << keres << endl;
    //Átalakítjuk nagybetűssé
    unsigned int j=0;
        while(j<keres.length()) {

            keres[j]=(char) toupper(keres[j]);
            j++;

        }

    for(i=0; i<db; i++) {

        string dal;
        dal=zeneszam[i].eloado+":"+zeneszam[i].dal;
         //Átalakítjuk nagybetűssé az összehasonlításhoz
        j=0;
        while(j<dal.length()) {

            dal[j]=(char) toupper(dal[j]);
            j++;

        }
       if(dal.find(keres)!=dal.npos) ki << zeneszam[i].eloado+":"+zeneszam[i].dal << endl;
       // if(dal.find(keres)!=dal.npos - ha a keresés nem tart a string végéig!

    }

    ki.close();

    ///6. feladat
    int osszido=0, /*osszidonormal=0,*/ k=1;    // k: az egész órákat jelöli
    for(i=0; i<db; i++) {

        if(zeneszam[i].sorszam==1) {

            if(k*3600-osszido<=zeneszamhossza(zeneszam[i])) {   // Ha a szám hossza nagyobb, mint az egész óráig  hátralévő idő
               osszido+=k*3600-osszido+180;                     // akkor a különbséget az összidőhöz adjuk
               //cout << "Hírek" << " ";                        // Minden egész órakor hírek
               //ido(osszido);                                  // Aktuális idő óra:perc:mperc formátumban
               k++;                                             // Eltelt egy óra
            }
            //cout << "Felvezető" << endl;                      // A dalok előtt 60 mperc felvezető
            osszido+=60+zeneszamhossza(zeneszam[i]);
            //osszidonormal+=zeneszamhossza(zeneszam[i]);       // Normál esetben itt tartana az összidő

//cout << zeneszam[i].eloado << ":" << zeneszam[i].dal << " ";  // Aktuális dal

//cout << "(" << zeneszam[i].perc << ":" << zeneszam[i].mperc << ")" << " "; // Aktuális dal hossza
//ido(osszido);                                                 // A dal vége utáni aktuális idő
        }

    }
    cout << "6. feladat" << endl;
    cout << "A műsor vége: " << endl;
    ido(osszido);
    //ido(osszidosima);                                         // Normál esetben a műsor vége
cin.get();
return 0;

}
