#pragma once

#include <stack>
#include <memory>

#include "core/systemevent.h"
#include "core/vector.h"
#include "core/time.h"

class GUIState
{
public:

    enum Tag {
        SPLASH_SCREEN,
        MAIN_MENU,
        GAME_PICKER,
        GAME,
        EDITOR_PICKER,
        EDITOR,
        SETTINGS,
        ABOUT,

        AMOUNT
    };

    virtual ~GUIState() = default;

    virtual void input(const kku::SystemEvent& event) = 0;
    virtual void update(const kku::microsec& dt) = 0;
    virtual void display() const = 0;

    virtual void enter() = 0;
    virtual void leave() = 0;
};
