#pragma once

#include <map>
#include <memory>

#include "core/game.h"
#include "core/timeline.h"
#include "classicmode/classicnote.h"
#include "classicmode/classicactions.h"

class HoldManager;
class GameContext;

class ClassicGame final : public kku::Game
{
public:
    explicit ClassicGame(const std::shared_ptr<kku::Timeline<ClassicNote>>& timeline,
                         const std::shared_ptr<GameContext>& context);

    virtual void run() override;

    virtual void input(kku::GameEvent&& inputdata) override;
    virtual void update(kku::UpdateData&& updatedata) override;
    virtual void display() const override;

private:
    const std::shared_ptr<kku::Timeline<ClassicNote>> _timeline;
    const std::shared_ptr<GameContext> _context;
};
