#ifndef InitDatei_H
#define InitDatei_H

#include "Array.h"

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

    //! Verwaltet Initialisierungsdateien in denen Bestimmte Variablen im Format
    //! name=Wert gespeichert sind
    class InitDatei : public virtual ReferenceCounter
    {
    private:
        Text* pfad;
        RCArray<Text>* name;
        RCArray<Text>* wert;

    public:
        //! Konstruktor
        DLLEXPORT InitDatei();
        //! Konstruktor
        //! \param pfad Der Pfad zur Datei
        DLLEXPORT InitDatei(Text* pfad);
        //! Konstruktor
        //! \param pfad Der Pfad zur Datei
        DLLEXPORT InitDatei(const char* pfad);
        //! Destruktor
        DLLEXPORT ~InitDatei();
        //! Setzt den Pfad zur Datei
        //! \param pfad Der Pfad zur Datei
        DLLEXPORT void setPfad(Text* pfad);
        //! Setzt den Pfad zur Datei
        //! \param pfad Der Pfad zur Datei
        DLLEXPORT void setPfad(const char* pfad);
        //! Laehdt die Werte aus der Datei
        //! \return 1, falls das Laden erfolgreich war. 0, wenn ein fehler
        //! aufgetreten ist.
        DLLEXPORT bool laden();
        //! Fuegt der Datei einen Wert hinzu
        //! \param name Der Name des Wertes
        //! \param wert Der Wert, der gespeichert werden soll
        //! \return 1, falls der Wert erfolgreich hinzugefuegt wurde
        DLLEXPORT bool addWert(Text* name, Text* wert);
        //! Fuegt der Datei einen Wert hinzu
        //! \param name Der Name des Wertes
        //! \param wert Der Wert, der gespeichert werden soll
        //! \return 1, falls der Wert erfolgreich hinzugefuegt wurde
        DLLEXPORT bool addWert(const char* name, const char* wert);
        //! AEndert einen bestimmten Wert
        //! \param name Der Name des Wertes
        //! \param wert Der Wert, der gespeichert werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich geaendert
        //! werden konnte
        DLLEXPORT bool setWert(Text* name, Text* wert);
        //! AEndert einen bestimmten Wert
        //! \param name Der Name des Wertes
        //! \param wert Der Wert, der gespeichert werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich geaendert
        //! werden konnte
        DLLEXPORT bool setWert(const char* name, const char* wert);
        //! AEndert einen bestimmten Wert
        //! \param num Der Index des Wertes der geaendert werden soll
        //! \param wert Der Wert, der gespeichert werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich geaendert
        //! werden konnte
        DLLEXPORT bool setWert(int num, Text* wert);
        //! AEndert einen bestimmten Wert
        //! \param num Der Index des Wertes der geaendert werden soll
        //! \param wert Der Wert, der gespeichert werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich geaendert
        //! werden konnte
        DLLEXPORT bool setWert(int num, const char* wert);
        //! Loescht einen bestimmten Wert
        //! \param name Der Name des Wertes, der geloescht werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich geloescht
        //! werden konnte
        DLLEXPORT bool removeWert(Text* name);
        //! Loescht einen bestimmten Wert
        //! \param name Der Name des Wertes, der geloescht werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich geloescht
        //! werden konnte
        DLLEXPORT bool removeWert(const char* name);
        //! Loescht einen bestimmten Wert
        //! \param num Der Index des Wertes der geloescht werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich geloescht
        //! werden konnte
        DLLEXPORT bool removeWert(int num);
        //! Loescht alle Werte aus der Datei
        DLLEXPORT void removeAlle();
        //! Speichert alle Werte in der Datei
        //! \return 1, falls das Speichern erfolgreich war
        DLLEXPORT bool speichern();
        //! Gibt die Anzahl der gespeicherten Werte zurueck
        DLLEXPORT int getWertAnzahl() const;
        //! UEberprueft, ob ein bestimmter Wert existiert
        //! \param name Der Name, nach dem gesucht werden soll
        //! \return 1, falls der Wert gefunden wurde
        DLLEXPORT bool wertExistiert(Text* name);
        //! UEberprueft, ob ein bestimmter Wert existiert
        //! \param name Der Name, nach dem gesucht werden soll
        //! \return 1, falls der Wert gefunden wurde
        DLLEXPORT bool wertExistiert(const char* name);
        //! Gibt den Index eines Bestimmten Wertes zurueck
        //! \param name Der Name des Wertes, nach dem gesucht werden soll
        //! \return -1, falls der Wert nicht gefunden wurde. Der Index des
        //! Wertes.
        DLLEXPORT int getWertNummer(Text* name);
        //! Gibt den Index eines Bestimmten Wertes zurueck
        //! \param name Der Name des Wertes, nach dem gesucht werden soll
        //! \return -1, falls der Wert nicht gefunden wurde. Der Index des
        //! Wertes.
        DLLEXPORT int getWertNummer(const char* name);
        //! Gibt einen bestimmten Wert zurueck
        //! \param name Der Name des Wertes, der zurueckgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde.
        DLLEXPORT Text* getWert(Text* name);
        //! Gibt einen bestimmten Wert zurueck
        //! \param name Der Name des Wertes, der zurueckgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde.
        DLLEXPORT Text* getWert(const char* name);
        //! Gibt einen bestimmten Wert zurueck
        //! \param num Der Index des Wertes, der zurueckgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde.
        DLLEXPORT Text* getWert(int num);
        //! Gibt einen bestimmten Wert zurueck
        //! \param name Der Name des Wertes, der zurueckgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde. Der Wert ohne
        //! erhoehten Reference Counter
        DLLEXPORT Text* zWert(Text* name);
        //! Gibt einen bestimmten Wert zurueck
        //! \param name Der Name des Wertes, der zurueckgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde. Der Wert ohne
        //! erhoehten Reference Counter
        DLLEXPORT Text* zWert(const char* name);
        //! Gibt einen bestimmten Wert zurueck
        //! \param num Der Index des Wertes, der zurueckgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde. Der Wert ohne
        //! erhoehten Reference Counter
        DLLEXPORT Text* zWert(int num);
        //! Gibt den Namen eines bestimmten Wertes zurueck
        //! \param num Der Index des Wertes, dessen Namen zurueckgegeben werden
        //! soll \return 0, falls der Wert nicht gefunden wurde.
        DLLEXPORT Text* getName(int num);
        //! Gibt den Namen eines bestimmten Wertes zurueck
        //! \param num Der Index des Wertes, dessen Namen zurueckgegeben werden
        //! soll \return 0, falls der Wert nicht gefunden wurde. Der Name ohne
        //! erhoehten Reference Counter
        DLLEXPORT Text* zName(int num);
        //! Gibt den Pfad zur Datei zurueck
        DLLEXPORT Text* getPfad() const;
        //! Gibt den Pfad zur Datei ohne erhoehten Reference Counter zurueck
        DLLEXPORT Text* zPfad() const;
    };
} // namespace Framework

#endif