CultureQuestORG/SDP2023

View on GitHub
app/src/main/java/ch/epfl/culturequest/ui/events/tournaments/TournamentViewModel.java

Summary

Maintainability
A
0 mins
Test Coverage
C
78%
package ch.epfl.culturequest.ui.events.tournaments;

import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import ch.epfl.culturequest.backend.tournament.tournamentobjects.ArtQuiz;
import ch.epfl.culturequest.backend.tournament.tournamentobjects.Tournament;
import ch.epfl.culturequest.database.Database;
import ch.epfl.culturequest.social.Profile;

public class TournamentViewModel extends ViewModel {

//    private final MutableLiveData<Tournament> tournament;
    private final MutableLiveData<Map<String, ArtQuiz>> quizzes = new MutableLiveData<>();
    private final MutableLiveData<String> tournament = new MutableLiveData<>();

    private final MutableLiveData<List<Map.Entry<Profile, Integer>>> tournamentLeaderboard = new MutableLiveData<>();

    public TournamentViewModel(Tournament tournament) {
        quizzes.setValue(tournament.getArtQuizzes());
        this.tournament.setValue(tournament.getTournamentId());

        Database.getLeaderboard(tournament).whenComplete((leaderboard, throwable) -> {
            if (throwable != null) {
                System.out.printf("Error getting leaderboard: %s%n", throwable.getMessage());
                throwable.printStackTrace();
            } else {
                List<Map.Entry<Profile, Integer>> leaderboardList = new ArrayList<>(leaderboard.entrySet());
                leaderboardList.sort((o1, o2) -> o2.getValue() - o1.getValue());
                System.out.printf("Leaderboard: %s%n", leaderboardList);
                tournamentLeaderboard.postValue(leaderboardList);
            }
        });
    }

    public MutableLiveData<Map<String, ArtQuiz>> getQuizzes() {
        return quizzes;
    }

    public MutableLiveData<String> getTournament() {
        return tournament;
    }

    public MutableLiveData<List<Map.Entry<Profile, Integer>>> getTournamentLeaderboard() {
        return tournamentLeaderboard;
    }

}