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

#ifndef __Events_H__
#define __Events_H__

#include "gamemath/Vector2f.h"
#include <stdbool.h>

// ATOM_event_key_down: struct keyEvent *
// ATOM_event_key_up: struct keyEvent *
// ATOM_event_key_modifiers_changed: struct keyEvent *
// ATOM_event_mouse_down: struct mouseEvent *
// ATOM_event_mouse_up: struct mouseEvent *
// ATOM_event_mouse_moved: struct mouseEvent *
// ATOM_event_mouse_dragged: struct mouseEvent *
// ATOM_event_mouse_scroll_wheel: struct mouseWheelEvent *
// ATOM_event_resized: double * referenceTime
// ATOM_event_backgrounded: double * referenceTime
// ATOM_event_foregrounded: double * referenceTime
// ATOM_event_fullscreened: double * referenceTime
// ATOM_event_windowed: double * referenceTime
// ATOM_event_gamepad_attach: struct Gamepad_device *
// ATOM_event_gamepad_detach: struct Gamepad_device *
// ATOM_event_gamepad_button_down: struct gamepadButtonEvent *
// ATOM_event_gamepad_button_up: struct gamepadButtonEvent *
// ATOM_event_gamepad_axis_move: struct gamepadAxisEvent *
// ATOM_event_draw: struct drawEvent *
// ATOM_event_confirm_quit: NULL
// ATOM_event_input_device_changed: UserInputDeviceType * previousInputDevice (current stored in gameSession->activeInputDevice)
// ATOM_event_cursor_change: NULL

struct keyEvent {
	unsigned int charCode;
	unsigned int keyCode;
	unsigned int modifiers;
	unsigned int lastModifiers;
	bool isRepeat;
	double timestamp;
};

struct mouseEvent {
	unsigned int buttonNumber;
	unsigned int buttonMask;
	Vector2f position;
	Vector2f delta;
	unsigned int modifiers;
	double timestamp;
};

struct mouseWheelEvent {
	Vector2f position;
	int deltaX;
	int deltaY;
	unsigned int buttonMask;
	unsigned int modifiers;
	double timestamp;
};

struct gamepadButtonEvent {
	struct Gamepad_device * device;
	unsigned int buttonID;
	double timestamp;
};

struct gamepadAxisEvent {
	struct Gamepad_device * device;
	unsigned int axisID;
	float value;
	float lastValue;
	double timestamp;
};

struct drawEvent {
	double referenceTime;
	double deltaTime;
};

#endif
