#include <windows.h>
#include <iostream.h>
#include "MainDisplayInterface.h"

MainDisplayInterface::MainDisplayInterface():
		gallowsX(50),
		gallowsY(280)
{
		maxX = GetSystemMetrics(SM_CXSCREEN);
		maxY = GetSystemMetrics(SM_CYSCREEN);
}

MainDisplayInterface::~MainDisplayInterface()
{
}



void MainDisplayInterface::updateDisplay(const HDC &memoryDC, const HPEN &hPen, int guessesLeft,
										const int &numGamesWon, const int &numGamesPlayed,
										char aSecretWord[], char aCategory[],char aGuessList[])
{
	PatBlt(memoryDC,0,0, maxX, maxY, PATCOPY);	// Erase previous screen.

	updateGallowsDisplay(memoryDC,hPen,guessesLeft);
	updateSecretWordDisplay(memoryDC,aSecretWord);

	updateScoreDisplay(memoryDC,numGamesWon,numGamesPlayed);
	updateCategoryDisplay(memoryDC,aCategory);
	updateGuessListDisplay(memoryDC,aGuessList);
}





void MainDisplayInterface::updateGallowsDisplay(const HDC &memoryDC,const HPEN &hPen, int guessesLeft)
{
	SelectObject(memoryDC, hPen);

	switch(guessesLeft)
	{

	case 0:
		// Draw Left Leg

		MoveToEx(memoryDC, (gallowsX + 130), (gallowsY - 90), NULL);
		LineTo(memoryDC, (gallowsX + 160), (gallowsY - 40));

	case 1:
		// Draw Right Leg

		MoveToEx(memoryDC, (gallowsX + 130), (gallowsY - 90), NULL);
		LineTo(memoryDC, (gallowsX + 100), (gallowsY - 40));

	case 2:
		// Draw Left Arm

		MoveToEx(memoryDC, (gallowsX + 130), (gallowsY - 145), NULL);
		LineTo(memoryDC, (gallowsX + 170), (gallowsY - 100));

	case 3:
		// Draw Right Arm

		MoveToEx(memoryDC, (gallowsX + 130), (gallowsY - 145), NULL);
		LineTo(memoryDC, (gallowsX + 90), (gallowsY - 100));

	case 4:
		// Draw Body
		
		MoveToEx(memoryDC, (gallowsX + 130), (gallowsY - 150), NULL);
		LineTo(memoryDC, (gallowsX + 130), (gallowsY - 90));

	case 5:

		// Draw Head

		Ellipse(memoryDC, (gallowsX + 115), (gallowsY - 180), (gallowsX + 145), (gallowsY - 150));

	case 6:

		// Draw Gallows

		MoveToEx(memoryDC, gallowsX, gallowsY, NULL);	// (100,300)
		LineTo(memoryDC, (gallowsX + 80), gallowsY);	// Gallows Base (180,300)
		MoveToEx(memoryDC, (gallowsX + 40), gallowsY, NULL);	// (140,300)
		LineTo(memoryDC, (gallowsX + 40), (gallowsY - 200));	// Gallows Poll (140,100)
		LineTo(memoryDC, (gallowsX + 150), (gallowsY - 200));	// Gallows Bar (250,100)
		MoveToEx(memoryDC, (gallowsX + 40), (gallowsY - 160), NULL);	// Gallows support(140,140)
		LineTo(memoryDC, (gallowsX + 80), (gallowsY - 200));
		MoveToEx(memoryDC, (gallowsX + 130), (gallowsY - 200), NULL); // start rope (230,100)
		LineTo(memoryDC, (gallowsX + 130), (gallowsY - 180));	// end rope (230,120)
		break;

	default:
		//
		break;
	}
}

void MainDisplayInterface::updateSecretWordDisplay(const HDC &memoryDC, char aSecretWord[])
{

	TextOut(memoryDC, gallowsX, (gallowsY + 50), aSecretWord, strlen(aSecretWord));
}

void MainDisplayInterface::updateScoreDisplay(const HDC &memoryDC, const int &numGamesWon, const int &numGamesPlayed)
{
	char szGamesWon[11] = "GAMES WON:";
	char szGamesPlayed[14] = "GAMES PLAYED:";
	char szWonTemp[4];
	char szPlayedTemp[4];
	szWonTemp[3] = '\0';
	szPlayedTemp[3] = '\0';

	itoa(numGamesWon,szWonTemp,10);
	itoa(numGamesPlayed,szPlayedTemp,10);

	TextOut(memoryDC, (gallowsX + 250), (gallowsY - 150), szGamesWon , strlen(szGamesWon));
	TextOut(memoryDC, (gallowsX + 500), (gallowsY - 150), szWonTemp , strlen(szWonTemp));
	TextOut(memoryDC, (gallowsX + 250), (gallowsY - 120), szGamesPlayed, strlen(szGamesPlayed));
	TextOut(memoryDC, (gallowsX + 500), (gallowsY - 120), szPlayedTemp, strlen(szPlayedTemp));
}

void MainDisplayInterface::updateCategoryDisplay(const HDC &memoryDC, char aCategory[])
{

	TextOut(memoryDC, gallowsX, (gallowsY - 250), aCategory, strlen(aCategory));
}

void MainDisplayInterface::updateGuessListDisplay(const HDC &memoryDC, char aGuessList[])
{
		TextOut(memoryDC, gallowsX, (gallowsY + 100), aGuessList, strlen(aGuessList));
}
