import type { Game } from '../../game';
import type { GameTrack } from '../../gameTrack';
import type { Kart } from '../../kart';
import type { CheckpointEvent } from '../../kartTracking';
import type { Response } from '../../response';
import type { MacAddressGameTrackConnections } from '../inputs';
import type { SocketHardwareOnDataEventsParams } from '../SocketHardwareOnDataEventsParams';

export interface SocketWebAppServerToClientEventsParams {
  'karts:authenticate:response': Response<void>;
  'karts:list:response': Response<Kart[]>;
  'karts:onKartsUpdated': Kart[];
  'karts:onHardwareData': {
    kartGuid: string;
    socketEvent: keyof SocketHardwareOnDataEventsParams;
    payload: SocketHardwareOnDataEventsParams[keyof SocketHardwareOnDataEventsParams];
  };
  'karts:tracking:checkpointEvent': {
    checkpointEvent: CheckpointEvent;
  };
  'game:changed': { game: Game };
  'gameTracks:onGameTrackUpdated': GameTrack[];
  'gameTracks:connectedRasperries': { macAddress: string }[];
  'gameTracks:list:response': Response<MacAddressGameTrackConnections>;
}
