#include <iostream>         // cout, cin
#include <fstream>          // fájlkezelés
#include <vector>           // vector adattípushoz
#include <algorithm>        // max, max_element, min_element
#include <cmath>            // sqrt, pow

using namespace std;

class ido                   // struktúra helyett most ez... ilyen is legyen
{
public:
    int o,p,m;
    int x,y;
};

void F1(vector<ido> &j)
{
    ifstream fbe;
    fbe.open("jel.txt");

    ido temp;
    while(fbe>>temp.o && fbe>>temp.p && fbe>>temp.m && fbe>>temp.x && fbe>>temp.y)
    {
        // cout << temp.o << " " << temp.p << " " << temp.m << " " << temp.x << " " << temp.y << endl;
        j.push_back(temp);
    }
    fbe.close();
}

void F2(vector<ido> j)
{
    cout << "2. feladat" << endl;
    cout << "Adja meg a jel sorszámát! ";
    int i;
    cin >> i;
    printf("x=%d y=%d\n",j[i-1].x,j[i-1].y);
}

int eltelt(int o1,int p1,int m1,int o2,int p2,int m2)
{
    int mp2=o2*3600+p2*60+m2;
    int mp1=o1*3600+p1*60+m1;
    return mp2-mp1;
}

string ora_perc_mp(int mp)
{
    int o=mp/3600;
    int p=mp%3600/60;
    int m=mp%3600%60;
    return to_string(o)+":"+to_string(p)+":"+to_string(m);
}

void F4(vector<ido> j)
{
    cout << endl << "4. feladat" << endl;

    ido first, last;
    first=j.front();
    last=j.back();
    int eltelt_mp=eltelt(first.o,first.p,first.m,last.o,last.p,last.m);
    cout << "Időtartam: " << ora_perc_mp(eltelt_mp) << endl;
}

void F5(vector<ido> j)
{
    cout << endl << "5. feladat" << endl;

    vector<int> x_koord,y_koord;
    for(auto elem:j)
    {
        x_koord.push_back(elem.x);
        y_koord.push_back(elem.y);
    }

    int min_x=*min_element(x_koord.begin(),x_koord.end());
    int min_y=*min_element(y_koord.begin(),y_koord.end());
    int max_x=*max_element(x_koord.begin(),x_koord.end());
    int max_y=*max_element(y_koord.begin(),y_koord.end());

    printf("Bal alsó: %d %d, jobb felső: %d %d\n",min_x,min_y,max_x,max_y);
}

void F6(vector<ido> j)
{
    cout << endl << "6. feladat" << endl;

    float summa=0.0;
    for(int i=0;i<j.size()-1;i++)
    {
        summa+=sqrt(pow(j[i].x-j[i+1].x,2.0)+pow(j[i].y-j[i+1].y,2.0));
    }
    printf("Elmozdulás: %.3f egység\n", summa);
}

void F7(vector<ido> j)
{
    // Elég hosszú, meg bonyolult, meg sok változó van,
    // de így talán követhetőbb a logika!?
    // Később ez egyszerűsíthető!
    int ot_perc=300;
    ofstream fki;
    fki.open("kimaradt.txt");
    for(int i=0;i<j.size()-1;i++)
    {
        int elmozdulas_x,elmozdulas_y;
        int elter=0,mennyiseg;          // koordináták eltérést mutatnak-e, eltérések végső mennyisége
        int elter_x=0, elter_y=0;
        int idoelteres=0;               // időbeli eltérés van-e
        bool van=false;                 // lesz-e a normálisnál nagyobb eltérés
        string ok;                      // eltérés oka
        ido j1,j2;
        j1=j[i];        // aktuális jel adatai
        j2=j[i+1];      // következő jel adatai
        // eltelt idő meghatározása:
        int eltelt_ido=eltelt(j1.o,j1.p,j1.m,j2.o,j2.p,j2.m);
        if(eltelt_ido>ot_perc)
        {
            van=true;
            idoelteres=(eltelt_ido-ot_perc)/ot_perc;
            if(eltelt_ido%ot_perc>0) idoelteres++;
        }
        // elmozdulások vizsgálata:
        elmozdulas_x=abs(j2.x-j1.x);       // abszolútérték, mert
        elmozdulas_y=abs(j2.y-j1.y);       // bármerre lehet elmozdulás
        if(elmozdulas_x>10)
        {
            van=true;
            elter_x=(elmozdulas_x-10)/10;
            if(elmozdulas_x%10>0) elter_x++;
        }
        if(elmozdulas_y>10)
        {
            van=true;
            elter_y=(elmozdulas_y-10)/10;
            if(elmozdulas_y%10>0) elter_y+=1;
        }
        // végül is van a normálistól eltérő kimaradás:
        if(van)
        {
            elter=max(elter_x,elter_y);
            mennyiseg=max(idoelteres,elter);
            idoelteres>=elter ? ok="időeltérés":ok="koordináta-eltérés";
            fki << j2.o << " " << j2.p << " " << j2.m << " " << ok << " " << mennyiseg << endl;
        }
    }
    fki.close();
}

int main()
{
    setlocale(LC_ALL,"");

    ido jel;
    vector<ido> jelek;

    F1(jelek);
    F2(jelek);
    F4(jelek);
    F5(jelek);
    F6(jelek);
    F7(jelek);
}
