#pragma once

#include <memory>

#include "classicmode/classicactions.h"
#include "graphics/classicnotegraphics.h"
#include "graphics/classicselectiongraphics.h"
#include "core/rectangle.h"
#include "core/corefactory.h"

class ClassicGraphicsFactory
{
public:
    explicit ClassicGraphicsFactory(const std::shared_ptr<kku::CoreFactory>& core_factory);
    
    std::shared_ptr<ClassicNoteGraphics> createSprite(Type type) const;
    std::shared_ptr<ClassicSelectionGraphics> createSelection() const;

private:
    const std::shared_ptr<kku::CoreFactory> _core_factory;

    struct SpriteData
    {
        std::shared_ptr<kku::Rectangle> shape;
        std::shared_ptr<kku::Rectangle> trail;
        kku::Color color;
    };

    SpriteData generate(Type type) const;
};
