#pragma once
#include <iostream>
#include <cassert>
#include <random>
#include "GridCounter.h"

using namespace std;

enum class griditem { empty, wall, player, target };
enum class movedirection {up, down, left, right};
enum class moveresults { ok, complete, wall};

class Grid
{
public:
	Grid(int gridSize);
	~Grid();

	void InititaliseGrid();
	void PrintGrid();
	griditem** GetGrid();
	griditem GetGridSquare(int x, int y);
	GridCounter* GetCounter();
	bool CheckComplete();


	moveresults MovePlayer(movedirection direction);

private:
	int gridSize;
	griditem** grid;
	GridCounter* counter;

	void CreateOuterWalls();
	void CreateInnerWalls();
	void PlacePlayerAndTarget();

	void CreateFirstWall(mt19937& rng);
	void CreateSecondWall(mt19937& rng);
	void CreateThirdWall(mt19937& rng);
	void CreateRectangles(mt19937& rng);
	void CreateFourthWall(mt19937& rng);

	char ConvertGridItemToChar(griditem it);
	int playerPosX, playerPosY;

	void UpdatePlayerPosition(int x, int y);

};

