#pragma once

#include <stack>
#include <memory>
#include <functional>
#include <SFML/Window/Event.hpp>

class GUIState
{
public:

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

        AMOUNT
    };

    virtual ~GUIState() = default;

    virtual void input(const sf::Event& event) = 0;
    virtual void update() = 0;
    virtual void draw() const = 0;

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