package hdm.mi.sthbackend.serviceTests;

import hdm.mi.sthbackend.exeptions.BracketAlreadyInitializedException;
import hdm.mi.sthbackend.exeptions.BracketRoundNotFoundException;
import hdm.mi.sthbackend.exeptions.InsufficientTeamsException;
import hdm.mi.sthbackend.exeptions.TournamentIdNotFoundException;
import hdm.mi.sthbackend.model.Match;
import hdm.mi.sthbackend.model.Tournament;
import hdm.mi.sthbackend.repository.ITournamentRepository;
import hdm.mi.sthbackend.service.TournamentService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
class DetermineWinnerTest {

    Logger log = LogManager.getLogger(DetermineWinnerTest.class);
    @Mock
    ITournamentRepository tournamentRepository;

    @InjectMocks
    TournamentService service;

    @Test
    void determineWinner() throws Exception {
        int bracketRound = 0;
        List<String> teamsNames = new ArrayList<>();
        teamsNames.add("dummyTeam 01");
        teamsNames.add("dummyTeam 02");
        teamsNames.add("dummyTeam 03");
        teamsNames.add("dummyTeam 04");
        teamsNames.add("dummyTeam 05");
        teamsNames.add("dummyTeam 06");

        Tournament tournament = service.createTournament(new Tournament("dummyTournament", teamsNames));


        try {
            service.createBracket(tournament.getTournamentId());
        } catch (TournamentIdNotFoundException | InsufficientTeamsException | BracketAlreadyInitializedException e) {
            log.debug(e.getMessage());
        }

        try {
            service.fillBracketRandom(tournament.getTournamentId());
        } catch (TournamentIdNotFoundException e) {
            log.debug("Error while trying to fill bracket");
        }


        Match match = tournament.getBracket().get(0).getMatches().entrySet().stream().findFirst().orElseThrow(Exception::new).getValue();
        match.getTeamScores().keySet().forEach(System.out::println);


    }

}