using UnityEngine;

namespace Gamelogic.Grids.Examples
{
	public class LayeredGridWithNeighborsTest : GLMonoBehaviour
	{
		public MatchBlock cellPrefab;

		private LayeredGrid<MatchBlock, RectPoint> grid;
		private SimpleLayeredMap<RectPoint> map;

		public void Start()
		{
			map = new SimpleLayeredMap<RectPoint>(new RectMap(new Vector2(69, 80)*0.005f), 1, 0);

			grid = new BlockGrid<MatchBlock>(10, 3, 3);

			foreach (var point in grid)
			{
				var cell = Instantiate(cellPrefab);

				cell.transform.parent = transform;
				cell.transform.localPosition = map[point];
				cell.Index = Random.Range(0, 3);
				cell.name = point.ToString();

				grid[point] = cell;
			}
		}

		public void Update()
		{
			if (Input.GetMouseButtonDown(0))
			{
				var mousePosition = Input.mousePosition;
				var ray = Camera.main.ScreenPointToRay(mousePosition);

				RaycastHit hitInfo;

				if (Physics.Raycast(ray, out hitInfo))
				{
					var worldPoint = hitInfo.point;
					var gridPoint = map[worldPoint];

					if (grid.Contains(gridPoint))
					{
						var points = Algorithms.GetConnectedSet(grid, gridPoint, (p, q) => grid[p].Index == grid[q].Index);

						foreach (var point in points)
						{
							grid[point].Color = Color.white;
						}
					}
				}
			}
		}
	}
}