#include "input/Controller.h"

Controller::Controller(Buttons& bs)
    : list(bs.get()), a(bs.add(GLFW_KEY_A, "A")), b(bs.add(GLFW_KEY_S, "B")), x(bs.add(GLFW_KEY_X, "X")),
      y(bs.add(GLFW_KEY_Z, "Y")), l(bs.add(GLFW_KEY_Q, "L")), r(bs.add(GLFW_KEY_W, "R")),
      start(bs.add(GLFW_KEY_E, "Start")), select(bs.add(GLFW_KEY_D, "Select")), left(bs.add(GLFW_KEY_LEFT, "Left")),
      right(bs.add(GLFW_KEY_RIGHT, "Right")), up(bs.add(GLFW_KEY_UP, "Up")), down(bs.add(GLFW_KEY_DOWN, "Down")) {
    bs.mapGamepadButton(a, GLFW_GAMEPAD_BUTTON_A);
    bs.mapGamepadButton(b, GLFW_GAMEPAD_BUTTON_B);
    bs.mapGamepadButton(x, GLFW_GAMEPAD_BUTTON_X);
    bs.mapGamepadButton(y, GLFW_GAMEPAD_BUTTON_Y);
    bs.mapGamepadButton(l, GLFW_GAMEPAD_BUTTON_LEFT_BUMPER);
    bs.mapGamepadButton(r, GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER);
    bs.mapGamepadButton(select, GLFW_GAMEPAD_BUTTON_BACK);
    bs.mapGamepadButton(start, GLFW_GAMEPAD_BUTTON_START);
    bs.mapGamepadButton(select, GLFW_GAMEPAD_BUTTON_LEFT_THUMB);
    bs.mapGamepadButton(start, GLFW_GAMEPAD_BUTTON_RIGHT_THUMB);
    bs.mapGamepadButton(up, GLFW_GAMEPAD_BUTTON_DPAD_UP);
    bs.mapGamepadButton(right, GLFW_GAMEPAD_BUTTON_DPAD_RIGHT);
    bs.mapGamepadButton(down, GLFW_GAMEPAD_BUTTON_DPAD_DOWN);
    bs.mapGamepadButton(left, GLFW_GAMEPAD_BUTTON_DPAD_LEFT);

    bs.mapGamepadAxis(left, -0.5f, GLFW_GAMEPAD_AXIS_LEFT_X);
    bs.mapGamepadAxis(right, 0.5f, GLFW_GAMEPAD_AXIS_LEFT_X);
    bs.mapGamepadAxis(left, -0.5f, GLFW_GAMEPAD_AXIS_RIGHT_X);
    bs.mapGamepadAxis(right, 0.5f, GLFW_GAMEPAD_AXIS_RIGHT_X);
    bs.mapGamepadAxis(up, -0.5f, GLFW_GAMEPAD_AXIS_LEFT_Y);
    bs.mapGamepadAxis(down, 0.5f, GLFW_GAMEPAD_AXIS_LEFT_Y);
    bs.mapGamepadAxis(up, -0.5f, GLFW_GAMEPAD_AXIS_RIGHT_Y);
    bs.mapGamepadAxis(down, 0.5f, GLFW_GAMEPAD_AXIS_RIGHT_Y);
    bs.mapGamepadAxis(l, 0.1f, GLFW_GAMEPAD_AXIS_LEFT_TRIGGER);
    bs.mapGamepadAxis(r, 0.1f, GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER);
}