package ch.zhaw.catan;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;

import java.awt.*;
import java.util.Arrays;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class SiedlerBoardTest {

    /**
     * To Test getLongestRoad in SiedlerBoard
     */
    @Nested
    class LongestRoadTest {

        List<Config.Faction> factionList = Arrays.asList(Config.Faction.values());

        SiedlerBoard board = new SiedlerBoard();

        @BeforeEach
        public void buildLongestRoad(){
            board.createFixGameField();
            board.setEdge(new Point(6, 6), new Point(5, 7), new Road(Config.Faction.BLUE, new Point(6, 6), new Point(5, 7)));
            board.setEdge(new Point(4, 6), new Point(5, 7), new Road(Config.Faction.BLUE, new Point(4, 6), new Point(5, 7)));
            board.setEdge(new Point(4, 6), new Point(4, 4), new Road(Config.Faction.BLUE, new Point(4, 6), new Point(4, 4)));
            board.setEdge(new Point(4, 6), new Point(3, 7), new Road(Config.Faction.BLUE, new Point(4, 6), new Point(3, 7)));
            board.setEdge(new Point(3, 7), new Point(3, 9), new Road(Config.Faction.BLUE, new Point(3, 7), new Point(3, 9)));
            board.setEdge(new Point(3, 9), new Point(4, 10), new Road(Config.Faction.BLUE, new Point(3, 9), new Point(4, 10)));
            board.setEdge(new Point(4, 10), new Point(5, 9), new Road(Config.Faction.BLUE, new Point(4, 10), new Point(5, 9)));
            board.setCorner(new Point(3, 7), new Settlement(Config.Faction.BLUE, new Point(3, 7)));

        }

        @Test
        public void testLongestRoadSimple() {
            System.out.println(board.getTextView());

            assertEquals(Config.Faction.BLUE, board.getLongestRoadFaction(factionList));
            assertEquals(6, board.getLongestRoadLength());
        }

        @Test
        public void testLongestRoadWithInterrupt() {
            board.setCorner(new Point(4, 10), new Settlement(Config.Faction.RED, new Point(4, 10)));
            System.out.println(board.getTextView());

            assertEquals(Config.Faction.BLUE, board.getLongestRoadFaction(factionList));
            assertEquals(5, board.getLongestRoadLength());
        }
    }

}
