#ifndef GSLDatei_H
#define GSLDatei_H

#include <Text.h>
#include <Array.h>
#include <Datei.h>
#include <Critical.h>
#include "Include/GSLDateiV.h"

using namespace Framework;

namespace GSL
{
	struct SoundKopf
	{
		Text name;
		char channels;
		unsigned int sampleRate;
		__int64 datPos;
		__int64 datEnd;
		Text pfad;
	};

	class GSLDatei : public GSLDateiV
	{
	private:
		Array< SoundKopf > *sounds;
		Text *pfad;
		Critical cs;
		int ref;

	public:
		// Konstruktor
		GSLDatei();
		// Destruktor
		~GSLDatei();
		// Datei open
		void setDatei( Framework::Text *txt ) override;
		void setDatei( char *txt ) override;
		bool leseDaten() override;
		int getSoundAnzahl() override;
		Text *getSoundName( int num ) override;
		// Laden
		GSLSoundV *getSound( Framework::Text *name ) override;
		GSLSoundV *getSound( char *name ) override;
		// Speichern
		bool speicherSound( GSLSoundV *zSound, Framework::Text *name ) override;
		bool speicherSound( GSLSoundV *zSound, char *name ) override;
		// Löschen
		bool removeSound( Framework::Text *name ) override;
		bool removeSound( char *name ) override;
		// Reference Counting
		GSLDateiV *getThis() override;
		GSLDateiV *release() override;
	};
}

#endif