#pragma once

#include <KSGNetwork.h>

namespace Editor
{
    struct TeamDaten;
    struct SpielerDaten;
    struct ObjektDaten;

    class SpielerTeamStruktur : public SpielerTeamStrukturV
    {
    public:
        SpielerTeamStruktur();
        ~SpielerTeamStruktur();
        SpielerTeamStrukturV *getThis() override;
        SpielerTeamStrukturV *release() override;
    };

    class EditorKlient
    {
    private:
        KSGClient::EditorServerClient *klient;
        Text error;
        int ref;

    public:
        // Konstruktor
        //  k: Der zu verwendende Klient
        EditorKlient( KSGClient::EditorServerClient *k );
        // Destruktor
        ~EditorKlient();
        // Initialisiert den Server
        //  return: 1, falls erfolgreich
        //          2, falls bereits eine Sitzung existiert
        //          0, sonnst
        int init();
        // Verwirft die vorhandene Sitzung und erstellt eine neue
        bool sitzungVerwerfen();
        // Speichert Sitzung und beendet Editor
        bool sitzungBeenden();
        // L�dt die Spieler Team Struktur
        bool getSpielerTeamStruktur( SpielerTeamStrukturV *zSts );

        bool saveTeam( const TeamDaten *team );
        bool saveSpieler( const SpielerDaten *spieler );
        bool saveObjekt( const ObjektDaten *objekt );
        bool deleteObjekt( int id );
        bool loadSpieler( Array< SpielerDaten* > &spieler );
        bool loadTeams( Array< TeamDaten* > &teams );
        bool loadObjekte( Array< ObjektDaten* > &Objekte );
        // Gibt den Letzten Fehler zur�ck
        char *getLastError() const;
        // Reference Counting
        EditorKlient *getThis();
        EditorKlient *release();
    };
}