#ifndef M2Datei_H
#define M2Datei_H

#include "Array.h"

namespace Framework
{
    class Model2DData; //! Model2D.h
    class Text;        //! Text.h

    //! Diese Klasse verwaltet das Framework eigenen Dateivormat für 2D Modell
    //! Daten Es können mehrere 2D Modell Daten in einer Datei gespeichert
    //! werden
    class M2Datei : public virtual ReferenceCounter
    {
    private:
        Text* pfad;
        RCArray<Text>* modelName;
        Array<__int64>* modelPos;

    public:
        //! Konstruktor
        DLLEXPORT M2Datei();
        //! Konstruktor
        //! \param pfad Der Pfad zur Datei
        DLLEXPORT M2Datei(const char* pfad);
        //! Konstruktor
        //! \param pfad Der Pfad zur Datei
        DLLEXPORT M2Datei(Text* pfad);
        //! Destruktor
        DLLEXPORT ~M2Datei();
        //! Setzt den Pfad zur Datei
        //! \param pfad Pfad zur Datei
        DLLEXPORT void setPfad(const char* pfad);
        //! Setzt einen Zeiger auf den Pfad zur Datei
        //! \param pfad Zeiger auf den Pfad zur Datei
        DLLEXPORT void setPfadZ(Text* pfad);
        //! Ließt grundlegende Informationen aus der Datei, die für ihre
        //! Verwendung benötigt werden
        DLLEXPORT void leseDaten();
        //! Speichert 2D Modell Daten in der Datei
        //! \param zMdr Ein Zeiger auf die zu speichernden Daten ohne erhöhtem
        //! Reference Counter \param name Der Name, unter dem die Daten in der
        //! Datei gespeichert werden sollen \return 1, falls das Modell
        //! gespeichert wurde. 0, falls ein fehler beim speichern auftrat
        DLLEXPORT bool saveModel(Model2DData* zMdr, Text* name);
        //! Speichert 2D Modell Daten in der Datei
        //! \param zMdr Ein Zeiger auf die zu speichernden Daten ohne erhöhtem
        //! Reference Counter \param name Der Name, unter dem die Daten in der
        //! Datei gespeichert werden sollen \return 1, falls das Modell
        //! gespeichert wurde. 0, falls ein fehler beim speichern auftrat
        DLLEXPORT bool saveModel(Model2DData* zMdr, const char* name);
        //! Löscht ein 2D Modell aus der Datei
        //! \param name Der Name des Modells
        //! \return 1, wenn das Modell gelöscht wurde. 0, wenn das Modell nicht
        //! gefunden wurde, oder ein fehler beim speichern auftrat
        DLLEXPORT bool removeModel(Text* name);
        //! Löscht ein 2D Modell aus der Datei
        //! \param name Der Name des Modells
        //! \return 1, wenn das Modell gelöscht wurde. 0, wenn das Modell nicht
        //! gefunden wurde, oder ein fehler beim speichern auftrat
        DLLEXPORT bool removeModel(const char* name);
        //! Lähd ein 2D Modell aus der Datei
        //! \param name Der name des zu ladenden Modells
        //! \return Die geladenen Daten
        DLLEXPORT Model2DData* ladeModel(Text* name) const;
        //! Lähd ein 2D Modell aus der Datei
        //! \param name Der name des zu ladenden Modells
        //! \return Die geladenen Daten
        DLLEXPORT Model2DData* ladeModel(const char* name) const;
        //! überprft, ob ein bestimmtes 2D Modell in der Datei existiert
        //! \param name Der Name des zu suchenden 2D Modells
        //! \return 1, wenn das Modell gefunden wurde. 0 sonst
        DLLEXPORT bool hatModel(const char* name) const;
        //! ügibt die Anzahl der gespeicherten Modelle zurück
        DLLEXPORT int getModelAnzahl() const;
        //! Gibt den Namen eines Bestimmten Modells zurück
        //! \param i Der Index des Modells
        //! \return Ein Zeiger aud den Namen des Modells ohne erhöhten Reference
        //! Counter
        DLLEXPORT Text* zModelName(int i) const;
    };
} // namespace Framework

#endif