#ifndef ANNOTATIONXML_H
#define ANNOTATIONXML_H

#include <QString>
#include <QRect>
#include <QLinkedList>
#include <QPolygon>
#include "frame.h"
#include "sequenz.h"
#include <QLabel>
#include <QFileInfo>
#include <QProgressDialog>

/*
 * Diese Klasse lädt die annotierten Bildsequenzen
 */
class AnnotationLoader
{
private:

    Sequenz *sequenz; // Enthält die geladene Sequenz
    QString  error;   // Enthält eine Fehlermeldung, falls beim laden ein Fehler
                      // aufgetreten ist

public:

    // Lädt eine Bildsequenz
    //  directory: Der Pfad zum Ordner, der die Bildsequenz enthält
    //  status: Im Verlauf des Ladens wird der Statustext in diesem Label
    //          gesetzt
    AnnotationLoader(QString directory,
                     QLabel *status);
    ~AnnotationLoader();

    // Gibt die geladene Sequenz zurück
    //  0 falls beim Laden ein Fehler aufgetreten ist
    Sequenz* getSequenz();

    // Gibt eine Fehlermeldung zurück, falls beim Laden ein Fehler aufgetreten
    // ist
    QString getErrorMessage();
};

/*
 * Diese Klasse erstellt eine neue Bildsequenz aus einem Ordner mit Bildern,
 * oder einer csv Datei
 */
class AnnotationCreator
{
private:

    Sequenz *sequenz;
    int numFrames;

    // Zählt alle Bilder in einem Ordner
    //  f: die Informationen zu dem Ordner
    int getImageCount(QFileInfo f);

    // Erstellt Annotationen zu allen Bildern in einem Ordner
    //  file: Die Information zur Datei, zu der Annotationen erstellt werden
    //        sollen
    //  index: Der Index des Bildes
    //  kamera: Der Name der aktuellen Kamera
    //  targetDir: Der Pfad zum Ziel Ordner
    //  nLen: Die maximale Länge des Namens
    //  status: Ein Zeiger auf den Status Text
    //  offset: Der Index des sersten Bildes der Sequenz
    //  limit: Die Anzahl der Bilder in der Sequenz
    //  progress: Ein Dialog mit einer Fortschrittsleiste
    //  kamId: Die Id der momentanen Kamera
    void createAnnotationFor(QFileInfo        file,
                             int            & index,
                             QString          kamera,
                             QString          targetDir,
                             int              nLen,
                             QLabel          *status,
                             int            & offset,
                             int            & limit,
                             QProgressDialog& progress,
                             int            & kamId);

public:

    // Erstellt eine neue Sequenz und Lädt diese
    //  directory: Der Pfad zu dem Ordner, welche die Bilder der neuen Sequenz
    //             enthält
    //  status: Im Verlauf des Erstellens wird der Statustext in diesem Label
    //          gesetzt
    AnnotationCreator(QString directory,
                      QLabel *status);
    ~AnnotationCreator();

    // Gibt die geladene neu erstellte Sequenz zurück
    //  0 falls beim Erstellen oder beim Laden ein Fehler aufgetreten ist
    Sequenz* getSequenz();
};

#endif // ANNOTATIONXML_H
