import { Game, GameType } from '../../game';
import { GameTrack, GameTrackKartConfig } from '../../gameTrack';
import { PlaySoundOptions, ShowLightsColorParams, ShowLightsEffectParams } from '../../hardware';
import { Kart, KartStatus } from '../../kart';
import { CheckpointEvent } from '../../kartTracking';
import { Response } from '../../response';
import { MacAddressGameTrackConnections } from '../inputs';
import { SocketHardwareModulesEventsParams } from '../SocketHardware.types';
import { SocketPowerUpEventsParams } from '../SocketPowerUp.types';
export type SocketGameTrackEventsParams = {
    'game-track:init:response': Response<GameTrack>;
};
export type SocketGameTrackEventParams = {
    'game-track:emergency:activate': undefined;
    'game-track:emergency:deactivate': undefined;
    'game-track:lights:showEffect': ShowLightsEffectParams;
    'game-track:lights:showColor': ShowLightsColorParams;
    'game-track:sound:play': PlaySoundOptions;
};
export type SocketGameTrackServerToClientEventsParams = SocketGameTrackEventsParams & SocketGameTrackEventParams;
type SocketKartPowerUpEventsParams = {
    [K in keyof SocketPowerUpEventsParams as `kart:${K}`]: SocketPowerUpEventsParams[K];
};
export type SocketKartEventsParams = {
    'kart:init:response': Response<{
        kart: Kart;
        gameTrack: GameTrack;
    }>;
    'kart:gameTrack:updated': {
        gameTrack: GameTrack;
        config: GameTrackKartConfig;
    };
    'kart:gameTrack:emergency:started': undefined;
    'kart:gameTrack:emergency:stopped': undefined;
    'kart:status:change': {
        status: KartStatus;
    };
};
export type SocketGameEventParams = {
    'kart:game:selected': {
        gameId: string;
        gameType: GameType;
    };
    'kart:game:eliminated': {
        gameId: string;
        gameType: GameType;
    };
    'kart:game:yellow-flag:started': {
        gameId: string;
        gameType: GameType;
    };
    'kart:game:yellow-flag:stopped': {
        gameId: string;
        gameType: GameType;
    };
    'kart:game:red-flag:started': {
        gameId: string;
        gameType: GameType;
    };
    'kart:game:red-flag:stopped': {
        gameId: string;
        gameType: GameType;
    };
    'kart:game:started': {
        game: Game;
    };
    'kart:game:finished': {
        game: Game;
        isWinner: boolean;
    };
    'kart:game:sync': {
        game: Game;
    };
};
export type SocketKartServerToClientEventsParams = SocketKartEventsParams & SocketGameEventParams & SocketKartPowerUpEventsParams;
export type SocketWebAppServerToClientEventsParams = {
    'karts:authenticate:response': Response<void>;
    'karts:list:response': Response<Kart[]>;
    'karts:onKartsUpdated': Kart[];
    'karts:onHardwareData': {
        kartGuid: string;
        socketEvent: keyof SocketHardwareModulesEventsParams;
        payload: SocketHardwareModulesEventsParams[keyof SocketHardwareModulesEventsParams];
    };
    'karts:tracking:checkpointEvent': {
        checkpointEvent: CheckpointEvent;
    };
    'game:changed': {
        game: Game;
    };
    'gameTracks:onGameTrackUpdated': GameTrack[];
    'gameTracks:connectedRasperries': {
        macAddress: string;
    }[];
    'gameTracks:list:response': Response<MacAddressGameTrackConnections>;
};
export {};
