#ifndef JNR_INPUT_H
#define JNR_INPUT_H

#include <stdbool.h>
#include <SDL2/SDL.h>

typedef enum Action {
    ACTION_LEFT,
    ACTION_RIGHT,
    ACTION_UP,
    ACTION_DOWN,
    ACTION_JUMP,
    ACTION_SHOOT,
    ACTION_DASH,
    ACTION_PAUSE,
    ACTION_COUNT
} Action;

void input_init(void);
void input_poll(void);          /* call once per frame before updates   */
void input_consume(void);       /* call after each fixed update tick    */
bool input_pressed(Action a);   /* pressed since last consume           */
bool input_held(Action a);      /* currently held down                  */
bool input_released(Action a);  /* released since last consume          */
void input_shutdown(void);

/* Returns true if SDL_QUIT was received */
bool input_quit_requested(void);

/* ── Mouse state ────────────────────────────────── */
typedef enum MouseButton {
    MOUSE_LEFT   = 0,
    MOUSE_MIDDLE = 1,
    MOUSE_RIGHT  = 2,
    MOUSE_BUTTON_COUNT
} MouseButton;

/* Mouse position in logical (game) coordinates */
void input_mouse_pos(int *x, int *y);

/* Mouse button queries (same semantics as keyboard) */
bool input_mouse_pressed(MouseButton btn);
bool input_mouse_held(MouseButton btn);
bool input_mouse_released(MouseButton btn);

/* Scroll wheel delta since last poll (positive = up) */
int input_mouse_scroll(void);

/* Raw keyboard access for text-like input in editor */
bool input_key_pressed(SDL_Scancode key);
bool input_key_held(SDL_Scancode key);

#endif /* JNR_INPUT_H */
