/**
 * Event constants emitted by the floating control layer and consumed by the
 * gameplay layer. Centralising them avoids typo-driven wiring bugs and gives
 * Jest a place to assert against expected strings.
 */

export const InputEvents = {
    /** payload: `{ dx: number; dy: number; klass: JoystickAngleClass }` */
    JoystickMove: 'input/joystickMove',
    /** payload: `{}` — jump button went down (req 2.2). */
    JumpPressed: 'input/jumpPressed',
    /** payload: `{ holdMs: number }` — jump button released. */
    JumpReleased: 'input/jumpReleased',
    /** payload: `{}` — shuriken button down. */
    ShurikenPressed: 'input/shurikenPressed',
    ShurikenReleased: 'input/shurikenReleased',
    /** payload: `{}` — ninja sword button down. */
    NinjaSwordPressed: 'input/ninjaSwordPressed',
    NinjaSwordReleased: 'input/ninjaSwordReleased',
    /**
     * payload: `{ id: 'jump' | 'shuriken' | 'ninja_sword'; disabled: boolean; reason?: string }`
     * — button must repaint (e.g. airborne → jump disabled, req 2.4).
     */
    ButtonVisualChanged: 'input/buttonVisualChanged',
} as const;

export type InputEventName = (typeof InputEvents)[keyof typeof InputEvents];
