#ifndef GAMESERVER_H
#define GAMESERVER_H

#include "server/commands/ServerState.h"
#include "server/network/Client.h"
#include "common/network/Packet.h"
#include "gaming-core/utils/Clock.h"
#include "commands/CommandManager.h"
#include "raw-terminal/RawReader.h"

class GameServer final {
    ServerState state; 
    Clock tps;
    RawReader<256, 10> reader;
    CommandManager commandManager;

public:
    GameServer();

    void tick();

    void onFullServerClientConnect(Client& client);
    void onClientConnect(Client& client);
    void onClientPackage(Client& client, Packet& packet);
    void onClientDisconnect(Client& client);
    
    bool isRunning() const;

private:
    void handleCommands();
};

#endif