use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::player;
pub type Id = Uuid;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListGamesResponse {
pub games: Vec<Game>,
pub is_before: bool,
pub is_after: bool,
pub total_games: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Game {
pub id: Id,
pub state: GameState,
pub players: HashMap<player::Id, player::Player>,
pub player_states: HashMap<player::Id, PlayerState>,
pub rounds: Vec<Round>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum GameServerEvent {
State(GameState), PlayerStates(HashMap<player::Id, PlayerState>), CorrectGuess, IncorrectGuess, CloseGuess, RoundTick(u32), RoundRecapTick(u32), }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum GameState {
Starting(u32), Ongoing(Option<u32>, usize, usize, Round), RoundRecap(Option<u32>, usize, RoundInfo), Ending,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PlayerState {
pub name: String,
pub guess_state: GuessState,
pub score: i32,
pub lives: u8,
pub is_afk: bool,
}
pub type PlayerStates = HashMap<player::Id, PlayerState>;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum GuessState {
Guessing,
FinishedSuccess,
FinishedFailure,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Round {
pub image_id: Id,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RoundInfo {
pub game_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum GameClientEvent {
GameGuess(String),
SkipRound,
}