#include<iostream>
#include<fstream>
#include<cstdlib>
#include<string>
#include<vector>
using namespace std;
class Zaznam{
	public:
		int rok;
		int mesic;
		int den;
		int hodina;
		int minuta;
		int sekunda;
};
void menu(){
	cout << "Menu:" << endl <<
	"(1) Vypsat vsechny zaznamy z Ondrejova" << endl <<
	"(2) Vypsat vsechny zaznamy z Kunzaku" << endl <<
	"(3) Vypsat spolecne zaznamy" << endl <<
	"(4) Vypsat zaznamy jen z Ondrejova" << endl <<
	"(5) Vypsat zaznamy jen z Kunzaku" << endl <<
	"(6) Ukoncit program" << endl;
}
void vypsat(vector<Zaznam>& zaznamy){
	if(zaznamy.size()==0){
        cout << "Zadne takove zaznamy neexistuji." << endl;
    }else{
        cout << "Pocet \t Datum \t\t Cas" << endl;
        for(int i=0;i<zaznamy.size();i++){
            cout << i+1 << ")\t";
            if(zaznamy[i].den<10){
                cout << "0" << zaznamy[i].den << ".";
            }else{
                cout << zaznamy[i].den << ".";
            }
            if(zaznamy[i].mesic<10){
                cout << "0" << zaznamy[i].mesic << ".";
            }else{
                cout << zaznamy[i].mesic << ".";
            }
            cout << zaznamy[i].rok << "\t";
            if(zaznamy[i].hodina<10){
                cout << "0" << zaznamy[i].hodina << ":";
            }else{
                cout << zaznamy[i].hodina << ":";
            }
            if(zaznamy[i].minuta<10){
                cout << "0" << zaznamy[i].minuta << ":";
            }else{
                cout << zaznamy[i].minuta << ":";
            }
            if(zaznamy[i].sekunda<10){
                cout << "0" << zaznamy[i].sekunda << endl;
            }else{
                cout << zaznamy[i].sekunda << endl;
            }
        }
    }
}
void imp(vector<Zaznam>& ondrejov, vector<Zaznam>& kunzak){
    ifstream f,g;
    f.open("ondrejov.log");
    g.open("kunzak.log");
    if(!f.is_open()||!g.is_open())
    {
        cout << "Soubor ondrejov.log nebo kunzak.log neexistuje." << endl;
        getchar();
        exit(EXIT_FAILURE);
    }
    else
    {
        char a;
        string b;
        Zaznam objekt;
        do{
            f >> objekt.den;
            f >> a;
            f >> objekt.mesic;
            f >> a;
            f >> objekt.rok;
            f >> objekt.hodina;
            f >> a;
            f >> objekt.minuta;
            f >> a;
            f >> objekt.sekunda;
            getline(f,b);
            ondrejov.push_back(objekt);
        }while(!f.eof());
        ondrejov.pop_back();
        f.close();
        do{
            g >> objekt.den;
            g >> a;
            g >> objekt.mesic;
            g >> a;
            g >> objekt.rok;
            g >> objekt.hodina;
            g >> a;
            g >> objekt.minuta;
            g >> a;
            g >> objekt.sekunda;
            getline(g,b);
            kunzak.push_back(objekt);
        }while(!g.eof());
        kunzak.pop_back();
        g.close();
    }
    cout << "Byly nacteny soubory ondrejov.log a kunzak.log." << endl;
}
void klasifikace(vector<Zaznam>& ondrejov, vector<Zaznam>& kunzak, vector<Zaznam>& pouzeOndrejov, vector<Zaznam>& pouzeKunzak, vector<Zaznam>& shoda){
    for(int i=0;i<ondrejov.size();i++){
        int x=0;
        for(int j=0;j<kunzak.size();j++){
            if((ondrejov[i].sekunda==kunzak[j].sekunda)&&(ondrejov[i].minuta==kunzak[j].minuta)&&(ondrejov[i].hodina==kunzak[j].hodina)){
                Zaznam objekt;
                objekt.den=ondrejov[i].den;
                objekt.mesic=ondrejov[i].mesic;
                objekt.rok=ondrejov[i].rok;
                objekt.hodina=ondrejov[i].hodina;
                objekt.minuta=ondrejov[i].minuta;
                objekt.sekunda=ondrejov[i].sekunda;
                shoda.push_back(objekt);
            }else{
                if(x==(kunzak.size()-1)){
                    Zaznam objekt;
                    objekt.den=ondrejov[i].den;
                    objekt.mesic=ondrejov[i].mesic;
                    objekt.rok=ondrejov[i].rok;
                    objekt.hodina=ondrejov[i].hodina;
                    objekt.minuta=ondrejov[i].minuta;
                    objekt.sekunda=ondrejov[i].sekunda;
                    pouzeOndrejov.push_back(objekt);
                }
                x++;
            }
        }
    }
    for(int i=0;i<kunzak.size();i++){
        int x=0;
        for(int j=0;j<ondrejov.size();j++){
            if((kunzak[i].hodina!=ondrejov[j].hodina)||(kunzak[i].minuta!=ondrejov[j].minuta)||(kunzak[i].sekunda!=ondrejov[j].sekunda)){
                if(x==(ondrejov.size()-1)){
                    Zaznam objekt;
                    objekt.den=kunzak[i].den;
                    objekt.mesic=kunzak[i].mesic;
                    objekt.rok=kunzak[i].rok;
                    objekt.hodina=kunzak[i].hodina;
                    objekt.minuta=kunzak[i].minuta;
                    objekt.sekunda=kunzak[i].sekunda;
                    pouzeKunzak.push_back(objekt);
                }
                x++;
            }
        }
    }
    cout << "Byla provedena klasifikace nactenych udalosti." << endl;
}
void exp(vector<Zaznam>& pouzeOndrejov, vector<Zaznam>& pouzeKunzak, vector<Zaznam>& shoda){
    ofstream f,g,h;
    f.open("shoda.log");
    g.open("pouze_ondrejov.log");
    h.open("pouze_kunzak.log");
    for(int i=0;i<shoda.size();i++){
        if(shoda[i].den<10){
            f << "0" << shoda[i].den << ".";
        }else{
            f << shoda[i].den << ".";
        }
        if(shoda[i].mesic<10){
            f << "0" << shoda[i].mesic << ".";
        }else{
            f << shoda[i].mesic << ".";
        }
        f << shoda[i].rok << "   ";
        if(shoda[i].hodina<10){
            f << "0" << shoda[i].hodina << ":";
        }else{
            f << shoda[i].hodina << ":";
        }
        if(shoda[i].minuta<10){
            f << "0" << shoda[i].minuta << ":";
        }else{
            f << shoda[i].minuta << ":";
        }
        if(shoda[i].sekunda<10){
            f << "0" << shoda[i].sekunda << endl;
        }else{
            f << shoda[i].sekunda << endl;
        }
    }
    for(int i=0;i<pouzeOndrejov.size();i++){
        if(pouzeOndrejov[i].den<10){
            g << "0" << pouzeOndrejov[i].den << ".";
        }else{
            g << pouzeOndrejov[i].den << ".";
        }
        if(pouzeOndrejov[i].mesic<10){
            g << "0" << pouzeOndrejov[i].mesic << ".";
        }else{
            g << pouzeOndrejov[i].mesic << ".";
        }
        g << pouzeOndrejov[i].rok << "   ";
        if(pouzeOndrejov[i].hodina<10){
            g << "0" << pouzeOndrejov[i].hodina << ":";
        }else{
            g << pouzeOndrejov[i].hodina << ":";
        }
        if(pouzeOndrejov[i].minuta<10){
            g << "0" << pouzeOndrejov[i].minuta << ":";
        }else{
            g << pouzeOndrejov[i].minuta << ":";
        }
        if(pouzeOndrejov[i].sekunda<10){
            g << "0" << pouzeOndrejov[i].sekunda << endl;
        }else{
            g << pouzeOndrejov[i].sekunda << endl;
        }
    }
    for(int i=0;i<pouzeKunzak.size();i++){
        if(pouzeKunzak[i].den<10){
            h << "0" << pouzeKunzak[i].den << ".";
        }else{
            h << pouzeKunzak[i].den << ".";
        }
        if(pouzeKunzak[i].mesic<10){
            h << "0" << pouzeKunzak[i].mesic << ".";
        }else{
            h << pouzeKunzak[i].mesic << ".";
        }
        h << pouzeKunzak[i].rok << "   ";
        if(pouzeKunzak[i].hodina<10){
            h << "0" << pouzeKunzak[i].hodina << ":";
        }else{
            h << pouzeKunzak[i].hodina << ":";
        }
        if(pouzeKunzak[i].minuta<10){
            h << "0" << pouzeKunzak[i].minuta << ":";
        }else{
            h << pouzeKunzak[i].minuta << ":";
        }
        if(pouzeKunzak[i].sekunda<10){
            h << "0" << pouzeKunzak[i].sekunda << endl;
        }else{
            h << pouzeKunzak[i].sekunda << endl;
        }
    }
    f.close();
    g.close();
    h.close();
    cout << "Byly vytvoreny soubory pouze_ondrejov.log, pouze_kunzak.log a shoda.log." << endl;
}
int main(){
	vector<Zaznam>ondrejov;
	vector<Zaznam>kunzak;
	vector<Zaznam>pouzeOndrejov;
	vector<Zaznam>pouzeKunzak;
	vector<Zaznam>shoda;
	imp(ondrejov,kunzak);
	klasifikace(ondrejov,kunzak,pouzeOndrejov,pouzeKunzak,shoda);
	exp(pouzeOndrejov,pouzeKunzak,shoda);
	menu();
	int volba;
	cin >> volba;
	while(!cin.good()||volba<1||volba>6)
    {
        cout << "Neni v nabidce" << endl;
        cin.clear();
        cin.ignore();
        cin >> volba;
    }
	while(volba!=6)
	{
		switch(volba)
		{
			case 1 : vypsat(ondrejov);break;
			case 2 : vypsat(kunzak);break;
			case 3 : vypsat(shoda);break;
			case 4 : vypsat(pouzeOndrejov);break;
			case 5 : vypsat(pouzeKunzak);break;
		}
		menu();
		cin >> volba;
		while(!cin.good()||volba<1||volba>6)
        {
            cout << "Neni v nabidce" << endl;
            cin.clear();
            cin.ignore();
            cin >> volba;
        }
	}
	return 0;
}
