import type { Game, GameType } from '../../game';
import type { GameTrack, GameTrackKartConfig } from '../../gameTrack';
import type { Kart, KartStatus } from '../../kart';
import type { Response } from '../../response';
import type { SocketPowerUpEventsParams } from '../SocketPowerUpEventsParams';
interface BaseGameEventParams {
    gameId: Game['id'];
    gameType: GameType;
}
export type SocketKartPowerUpEventsParams = {
    [Key in keyof SocketPowerUpEventsParams as `kart:${Key}`]: SocketPowerUpEventsParams[Key];
};
export interface SocketKartEventsParams {
    'kart:init:response': Response<{
        kart: Kart;
        gameTrack: GameTrack;
    }>;
    /** Whenever the Game Track config changed, the config might change as well*/
    'kart:gameTrack:updated': {
        gameTrack: GameTrack;
        config: GameTrackKartConfig;
    };
    /** When the physical button of the game track is pressed */
    'kart:gameTrack:emergency:started': undefined;
    /** When the physical button of the game track is released */
    'kart:gameTrack:emergency:stopped': undefined;
    /** Force kart to change status */
    'kart:status:change': {
        status: KartStatus;
    };
}
export interface SocketGameEventParams {
    /** Kart is selected for a game */
    'kart:game:selected': BaseGameEventParams;
    /** Kart Is eliminated from a game (game is in progress) */
    'kart:game:eliminated': BaseGameEventParams;
    'kart:game:yellow-flag:started': BaseGameEventParams;
    'kart:game:yellow-flag:stopped': BaseGameEventParams;
    'kart:game:red-flag:started': BaseGameEventParams;
    'kart:game:red-flag:stopped': BaseGameEventParams;
    'kart:game:started': {
        game: Game;
    };
    'kart:game:finished': {
        game: Game;
        isWinner: boolean;
    };
    'kart:game:sync': {
        game: Game;
    };
}
export type SocketKartServerToClientEventsParams = SocketKartEventsParams & SocketGameEventParams & SocketKartPowerUpEventsParams;
export {};
