// Copyright (c) 2023 Alex Diener. All rights reserved.

#include "PROJECT_NAME/Atoms.h"
#include "PROJECT_NAME/InputMapDefaults.h"
#include "shell/ShellKeyCodes.h"

void bindDefaultActions(InputMap * inputMap) {
	InputMap_bindKey(inputMap, ATOM_input_left,        KEY_CODE_LEFT_ARROW);
	InputMap_bindKey(inputMap, ATOM_input_right,       KEY_CODE_RIGHT_ARROW);
	InputMap_bindKey(inputMap, ATOM_input_up,          KEY_CODE_UP_ARROW);
	InputMap_bindKey(inputMap, ATOM_input_down,        KEY_CODE_DOWN_ARROW);
	InputMap_bindKey(inputMap, ATOM_input_wait,        KEY_CODE_SPACE);
	InputMap_bindKey(inputMap, ATOM_input_left,        KEY_CODE_NUMPAD_4);
	InputMap_bindKey(inputMap, ATOM_input_right,       KEY_CODE_NUMPAD_6);
	InputMap_bindKey(inputMap, ATOM_input_up,          KEY_CODE_NUMPAD_8);
	InputMap_bindKey(inputMap, ATOM_input_down,        KEY_CODE_NUMPAD_2);
	InputMap_bindKey(inputMap, ATOM_input_wait,        KEY_CODE_NUMPAD_5);
	InputMap_bindKey(inputMap, ATOM_input_interact,    KEY_CODE_X);
	InputMap_bindKey(inputMap, ATOM_input_undo,        KEY_CODE_BACKSPACE);
	InputMap_bindKey(inputMap, ATOM_input_undo,        KEY_CODE_Z);
	InputMap_bindKey(inputMap, ATOM_input_redo,        KEY_CODE_C);
	InputMap_bindKey(inputMap, ATOM_input_reset,       KEY_CODE_R);
	InputMap_bindKey(inputMap, ATOM_input_pause,       KEY_CODE_ESCAPE);
	InputMap_bindKey(inputMap, ATOM_input_save,        KEY_CODE_F5);
	InputMap_bindKey(inputMap, ATOM_input_load,        KEY_CODE_F9);
	InputMap_bindKey(inputMap, ATOM_input_menu_left,   KEY_CODE_LEFT_ARROW);
	InputMap_bindKey(inputMap, ATOM_input_menu_right,  KEY_CODE_RIGHT_ARROW);
	InputMap_bindKey(inputMap, ATOM_input_menu_up,     KEY_CODE_UP_ARROW);
	InputMap_bindKey(inputMap, ATOM_input_menu_down,   KEY_CODE_DOWN_ARROW);
	InputMap_bindKeyWithModifiers(inputMap, ATOM_input_menu_next, KEY_CODE_TAB, 0);
	InputMap_bindKeyWithModifiers(inputMap, ATOM_input_menu_previous, KEY_CODE_TAB, MODIFIER_SHIFT_BIT);
	InputMap_bindKey(inputMap, ATOM_input_menu_accept, KEY_CODE_ENTER);
	InputMap_bindKey(inputMap, ATOM_input_menu_accept, KEY_CODE_SPACE);
	InputMap_bindKey(inputMap, ATOM_input_menu_accept, KEY_CODE_Z);
	InputMap_bindKey(inputMap, ATOM_input_menu_cancel, KEY_CODE_ESCAPE);
	InputMap_bindKey(inputMap, ATOM_input_menu_cancel, KEY_CODE_BACKSPACE);
	InputMap_bindKey(inputMap, ATOM_input_menu_cancel, KEY_CODE_X);
	InputMap_bindKey(inputMap, ATOM_input_menu_alternate, KEY_CODE_C);
	InputMap_bindKey(inputMap, ATOM_input_menu_alternate, KEY_CODE_SLASH);
	
	InputMap_bindLogicalAxisAction(inputMap, ATOM_input_left, GAMEPAD_DPAD_X, -1);
	InputMap_bindLogicalAxisAction(inputMap, ATOM_input_right, GAMEPAD_DPAD_X, 1);
	InputMap_bindLogicalAxisAction(inputMap, ATOM_input_up, GAMEPAD_DPAD_Y, 1);
	InputMap_bindLogicalAxisAction(inputMap, ATOM_input_down, GAMEPAD_DPAD_Y, -1);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_wait, GAMEPAD_BOTTOM_FACE_BUTTON);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_interact, GAMEPAD_LEFT_FACE_BUTTON);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_undo, GAMEPAD_RIGHT_FACE_BUTTON);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_redo, GAMEPAD_RIGHT_STICK_BUTTON);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_reset, GAMEPAD_TOP_FACE_BUTTON);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_pause, GAMEPAD_RIGHT_CENTER_BUTTON);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_save, GAMEPAD_LEFT_FRONT_SHOULDER);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_load, GAMEPAD_RIGHT_FRONT_SHOULDER);
	InputMap_bindLogicalAxisAction(inputMap, ATOM_input_menu_left, GAMEPAD_DPAD_X, -1);
	InputMap_bindLogicalAxisAction(inputMap, ATOM_input_menu_right, GAMEPAD_DPAD_X, 1);
	InputMap_bindLogicalAxisAction(inputMap, ATOM_input_menu_up, GAMEPAD_DPAD_Y, 1);
	InputMap_bindLogicalAxisAction(inputMap, ATOM_input_menu_down, GAMEPAD_DPAD_Y, -1);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_menu_previous, GAMEPAD_LEFT_FRONT_SHOULDER);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_menu_next, GAMEPAD_RIGHT_FRONT_SHOULDER);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_menu_accept, GAMEPAD_BOTTOM_FACE_BUTTON);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_menu_cancel, GAMEPAD_RIGHT_FACE_BUTTON);
	InputMap_bindLogicalButtonAction(inputMap, ATOM_input_menu_alternate, GAMEPAD_LEFT_FACE_BUTTON);
	InputMap_bindLogicalAxisAction(inputMap, ATOM_input_menu_scroll_down, GAMEPAD_RIGHT_STICK_Y, -1);
	InputMap_bindLogicalAxisAction(inputMap, ATOM_input_menu_scroll_up, GAMEPAD_RIGHT_STICK_Y, 1);
}
