#include "Game.h"

Game::Game()
{
	PuzzleSolved = false;
	P1.SetName("Player 1");
	P2.SetName("Player 2");
	P3.SetName("Player 3");
}

void Game::StartGame()
{
	Board.MakeBoard();
	UBoard.MakeBoard();
	P1.SetTurn(true);
	int choice = 0;
	while (PuzzleSolved == false && choice != QUIT)
	{
		if (P1.GetTurn() == true)
		{
			choice = H.TakeTurn(P1);
			ProcessChoice(choice, P1);
		}
		if (P2.GetTurn() == true)
		{
			choice = H.TakeTurn(P2);
			ProcessChoice(choice, P2);
		}
		if (P3.GetTurn() == true)
		{
			choice = H.TakeTurn(P3);
			ProcessChoice(choice, P3);
		}
		CheckPuzzleSolved(Board);
	}
	if (PuzzleSolved == true)
		cout << "\n\nYou got it!!\n\n";
}

void Game::SetPuzzleSolved(bool PuzzleSolved)
{
	this->PuzzleSolved = PuzzleSolved;
}

void Game::CheckPuzzleSolved(WheelBoard Board)
{
	int count = 0;
	for (int i=0; i < Board.GetBoolPhrase().Length; i++)
	{
		if (Board.GetBoolPhrase().B_Phrase[i] == true)
		{
			count++;
		}
	}
	if (count == Board.GetBoolPhrase().Length)
		PuzzleSolved = true;
}

void Game::ProcessChoice(int choice, Player &P)
{
	int amt;
	switch (choice)
	{
	case SPIN_WHEEL: 
		amt = W.spin();
		char let;
		int let_count;
		cout << "Wheel Amount: $" << amt << endl;
		if (amt == 0) 
		{
			cout << "I'm sorry, but you just went bankrupt.\n\n";
			P.UpdateDollarAmount(amt);
			Board.DisplayBoard();
			P.SetTurn(false);
			if (P.GetName() == P1.GetName())
				P2.SetTurn(true);
			if (P.GetName() == P2.GetName())
				P3.SetTurn(true);
			if (P.GetName() == P3.GetName())
				P1.SetTurn(true);
		}
		else
		{
			let = P.PickLetter();
			if (UBoard.LetterUsed(let) == false)
			{
				let_count = Board.LetterInPuzzleCount(let);
				if (let_count == 0)
				{
					cout << "That letter is not part of the solution.\n\n";
					Board.DisplayBoard();
					P.SetTurn(false);
					if (P.GetName() == P1.GetName())
						P2.SetTurn(true);
					if (P.GetName() == P2.GetName())
						P3.SetTurn(true);
					if (P.GetName() == P3.GetName())
						P1.SetTurn(true);
				}
				else
				{
					P.UpdateDollarAmount(let_count * amt);
					Board.DisplayBoard();
				}
			}
			else
			{
				Board.DisplayBoard();
				P.SetTurn(false);
				if (P.GetName() == P1.GetName())
					P2.SetTurn(true);
				if (P.GetName() == P2.GetName())
					P3.SetTurn(true);
				if (P.GetName() == P3.GetName())
					P1.SetTurn(true);
			}
		}
		break;
	case DISPLAY_BOARD:
		Board.DisplayBoard();
		break;
	case DISPLAY_USED_BOARD:
		UBoard.DisplayBoard();
		break;
	case QUIT:
		P.SetTurn(false);
		break;
	default:
		cout << "Invalid selection.\n"
			<< "Try again!\n";
		break;
	}
}