#ifndef REQUESTFROMSERVER_H
#define REQUESTFROMSERVER_H

#include <QDialog>
#include "frame.h"
#include <QThread>
#include "DetectionClient.hh"

/*
 * Ein Thread, der die Vorabannotationen vom Server Abfragt
 */
class RequestFromServerThread : public QThread
{
    Q_OBJECT

    // Fragt die Daten vom Server ab
    void run() override;

public:
    RequestFromServerThread(QString serverAddress, Frame *f);

    DetectionClient *client; // Ein zeiger auf den Detection CLient

signals:
    // Wird aufgerufen, sobald der Thread regulär beendet wurde
    void threadReady( std::vector< std::vector< cv::Point > > *objects );

private:
    QString serverAddress; // Die Adresse des Servers
    Frame *f; // Das Bild, das beim Server abgefragt wird
};

namespace Ui {
class RequestFromServer;
}

/*
 * Verwaltet das Fenster, das bei der Abfrage von Vorabannotationen vom Server erscheint.
 */
class RequestFromServer : public QDialog
{
    Q_OBJECT

public:
    explicit RequestFromServer( QString serverAddress, Frame *f, QWidget *parent = 0);
    ~RequestFromServer();

    std::vector< std::vector< cv::Point > > getObjects();

private slots:
    // Abfragen von Vorabannotationen abbrechen
    void on_abbrechen_clicked();
    // Abfragen von Vorabannotationen abgeschlossen
    void onThreadReady( std::vector< std::vector< cv::Point > > *objects );


private:
    Ui::RequestFromServer *ui; // Ein Zeiger auf alle in requestfromserver.ui spezifizierten Objekte
    std::vector< std::vector< cv::Point > > objects; // Eine Liste mit Objekt Polygonen (antwort vom server)
    RequestFromServerThread *rfst; // Der Thread, in dem die Daten vom Server abgefragt werden
};

#endif // REQUESTFROMSERVER_H
