#pragma once

#include <memory>
#include "core/note.h"

class ClassicGraphicsManager;

class ClassicNote : public kku::Note
{
public:

    enum State
    {
          NONE = 0,

       INITIAL = 1,
        FLYING = 2,
         DYING = 3,
          DEAD = 4
    };

    explicit ClassicNote(const kku::microsec& perfect_offset, int id);
    virtual ~ClassicNote() override = default;

    virtual bool isActive(const kku::microsec& offset) const override = 0;
    virtual void update(const kku::microsec &music_offset) override = 0;
    virtual void input(kku::GameEvent&& input) override = 0;
    virtual void draw(const std::shared_ptr<const ClassicGraphicsManager>& graphics_manager) const = 0;

    void setState(State state) noexcept;
    State getState() const noexcept;
    int getId() const noexcept;

protected:
    State _state;
    int _id;
};
