use crate::error::Result;
use crate::v2::model::room::structs::room::Room;
use crate::v2::model::score::structs::multiplayer::multiplayer_scores::MultiplayerScores;
use crate::v2::model::score::structs::score::Score;

pub trait IMultiplayer {
    fn get_user_high_score(
        &self,
        room: String,
        playlist: u64,
        user: u64,
    ) -> impl std::future::Future<Output = Result<Score>>;
    fn get_scores(
        &self,
        room: String,
        playlist: u64,
        limit: Option<u32>,
        sort: Option<String>,
        cursor_string: Option<String>,
    ) -> impl std::future::Future<Output = Result<MultiplayerScores>>;
    fn get_score(
        &self,
        room: String,
        playlist: u64,
        score: u64,
    ) -> impl std::future::Future<Output = Result<Score>>;
    fn get_multiplayer_rooms(
        &self,
        limit: Option<u32>,
        mode: Option<String>,
        season_id: Option<u32>,
        sort: Option<String>,
        type_group: Option<String>,
    ) -> impl std::future::Future<Output = Result<Vec<Room>>>;
}
