#include <catch2/catch_test_macros.hpp>
#include <fmt/core.h>
#include "gui.hpp"
#include "map.hpp"
#include "dinkyecs.hpp"
#include "worldbuilder.hpp"
#include "save.hpp"
#include "systems.hpp"
#include "collider.hpp"
#include "components.hpp"

using namespace fmt;
using namespace components;
using std::string;

TEST_CASE("load a basic gui run but don't loop", "[gui]") {
  DinkyECS::World world;
  save::load_configs(world);
  Map game_map(40, 40);
  WorldBuilder builder(game_map);
  builder.generate();

  const auto &config = world.get_the<MapConfig>();
  // configure a player as a fact of the world
  Player player{world.entity()};
  world.set_the<Player>(player);

  world.set<Position>(player.entity, {game_map.place_entity(0)});
  world.set<Motion>(player.entity, {0, 0});
  world.set<Combat>(player.entity, {100, 10});
  world.set<Tile>(player.entity, {config.PLAYER_TILE});
  world.set<Inventory>(player.entity, {5});
  world.set<LightSource>(player.entity, {6,1});

  spatial_map collider;
  world.set_the<spatial_map>(collider);
  System::init_positions(world);

  GUI gui(world, game_map);
  gui.main(true); // runs once
}
