#include <catch2/catch_test_macros.hpp>
#include <fmt/core.h>
#include "systems.hpp"
#include <cmath>
#include <numbers>


TEST_CASE("figure out best rotation direction", "[systems-rotate]") {
  Matrix map = matrix::make(3, 3);

  Point player_at{1, 1};
  map[player_at.y][player_at.x] = 2;


  for(matrix::box target{map, player_at.x, player_at.y, 1}; target.next();) {
    for(matrix::box aiming_at{map, player_at.x, player_at.y, 1}; aiming_at.next();) {
      map[aiming_at.y][aiming_at.x] = 10;

      float target_dx = float(player_at.x) - float(target.x);
      float target_dy = float(player_at.y) - float(target.y);
      float aiming_dx = float(player_at.x) - float(aiming_at.x);
      float aiming_dy = float(player_at.y) - float(aiming_at.y);

      float target_angle = atan2(-target_dy, target_dx) * (180.0 / std::numbers::pi);
      float aiming_angle = atan2(-aiming_dy, aiming_dx) * (180.0 / std::numbers::pi);

      float diff = target_angle - aiming_angle;
      double normalized = fmod(diff + 360.0, 360.0);

      REQUIRE(normalized >= 0);
      REQUIRE(normalized <= 360);

      map[aiming_at.y][aiming_at.x] = 0;
    }
  }
}
