#pragma once
#include "components.hpp"
#include "events.hpp"
#include <guecs/ui.hpp>
#include "textures.hpp"
#include "levelmanager.hpp"

namespace guecs {
  Clickable make_action(GameLevel& target, Events::GUI event);
  Clickable make_action(GameLevel& target, Events::GUI event, std::any data);

  struct GrabSource {
    DinkyECS::Entity world_entity;
    std::function<void()> commit;
    std::shared_ptr<sf::Sprite> sprite = nullptr;

    DinkyECS::Entity grab();
    void setSprite(guecs::UI& gui, guecs::Entity gui_id);
    void move(sf::Vector2f pos);
  };

  struct DropTarget {
    std::function<bool(DinkyECS::Entity world_entity)> commit;
  };
}