#pragma once
#include "constants.hpp"
#include <deque>
#include "graphics/textures.hpp"
#include <guecs/ui.hpp>
#include "gui/guecstra.hpp"
#include "gui/body_ui.hpp"

namespace gui {
  class StatusUI {
    public:
      guecs::UI $gui{};
      BodyUI $body_ui{};

      explicit StatusUI(size_t x, size_t y, size_t width, size_t height);

      StatusUI(const StatusUI& other) = delete;
      StatusUI(StatusUI&& other) = delete;
      ~StatusUI() = default;

      void update_level();
      void init();
      void render(sf::RenderWindow &window);
      void update();
      bool mouse(float x, float y, guecs::Modifiers mods);

      void remove_slot(guecs::Entity slot_id);
      bool place_slot(guecs::Entity gui_id, DinkyECS::Entity world_entity);
      void drop_item(DinkyECS::Entity item_id);

      void swap(guecs::Entity gui_a, guecs::Entity gui_b);
      bool occupied(guecs::Entity slot);
  };
}
