import java.util.Random;

class AI
{
	public int setBrick(Board gameBoard, int difficulty)
	{
		switch(difficulty)
		{
			case 0:
				return ai0(gameBoard);
			
			case 1:
				return ai1(gameBoard);

			//Nästa svårighetsgrad av AI:n
			/*case 2:
				return ai2(gameBoard);*/
			
			//Försiktighetsåtgärd bara
			default:
				return ai0(gameBoard);
		}
	}
	
	//Detta är den dummaste AI:n
	private int ai0(Board gameBoard)
	{
		int currentColor;
		
		currentColor = gameBoard.getCurrentColor();
		
		for(int i = 0; i < 64; i++)
		{
			//Väljer första bästa drag bland de tomma rutorna
			if(gameBoard.getBrickColor(i) == 0)
			{
				if(gameBoard.isValidMove(i, currentColor))
				{
					gameBoard.setBrick(i);
					return(i);
				}
			}
		}
		//Returnerar -1 om den inte kunde sätta ut någon bricka
		return -1;
	}
	
	//Kanske inte så mycket smartare, men den slumpar fram vad den ska göra och
	//ger därför ett mer oförutsägbart spel
	private int ai1(Board gameBoard)
	{
		int currentColor;
		int nrPossibleMoves;
		int slumpTal;
		int[] possibleMoves;
		Random randomGenerator;
		
		currentColor = gameBoard.getCurrentColor();
		nrPossibleMoves = 0;
		possibleMoves = new int[64];
		for(int i = 0; i < 64; i++)
		{
			possibleMoves[i] = -1;
		}
		slumpTal = 0;
		randomGenerator = new Random();
		
		//Skapar en lista med alla möjliga drag och räknar antalet av dessa
		for(int i = 0; i < 64; i++)
		{
			//Väljer första bästa drag bland de tomma rutorna
			if(gameBoard.getBrickColor(i) == 0)
			{
				if(gameBoard.isValidMove(i, currentColor))
				{
					possibleMoves[nrPossibleMoves] = i;
					nrPossibleMoves++;
				}
			}
		}
		//Om det gick att göra några drag, returneras -1.
		if(nrPossibleMoves == 0)
			return -1;
		
		//Slumpar fram ett tal mellan 0 och nrPossibleMoves.
		slumpTal = Math.abs(randomGenerator.nextInt()) % nrPossibleMoves;
		
		//Gör draget med nr slumpTal ur listan med möjliga drag.
		gameBoard.setBrick(possibleMoves[slumpTal]);
		return possibleMoves[slumpTal];		
	}
	
	//Nästa svårighetsgrad av AI:n
	/*private int ai2(Board gameBoard)
	{

	}*/
}
