#pragma once
#include "dinkyecs.hpp"
#include "devices.hpp"
#include "combat.hpp"
#include "inventory.hpp"
#include "tser.hpp"
#include "config.hpp"

namespace components {

  struct Player {
    DinkyECS::Entity entity;
    DEFINE_SERIALIZABLE(Player, entity);
  };

  struct Position {
    Point location;
    DEFINE_SERIALIZABLE(Position, location);
  };

  struct Motion {
    int dx;
    int dy;
    bool random=false;
    DEFINE_SERIALIZABLE(Motion, dx, dy);
  };

  struct Loot {
    int amount;
    DEFINE_SERIALIZABLE(Loot, amount);
  };

  struct Tile {
    std::string chr;
    DEFINE_SERIALIZABLE(Tile, chr);
  };

  struct GameConfig {
    Config game;
    Config enemies;
    Config items;
    Config tiles;
    Config devices;
  };

  struct EnemyConfig {
    int hearing_distance = 10;
  };

  struct Debug {
    bool PATHS=false;
    bool LIGHT=false;
  };

  struct Weapon {
    int damage = 0;
  };

  struct Curative {
    int hp = 10;
  };

  void configure(DinkyECS::World &world, DinkyECS::Entity entity, json& entity_data);
}
