﻿using Gamelogic;
using Gamelogic.Examples.TriangularPolarGrid;
using Gamelogic.Grids;
using UnityEngine;

public class TriangularPolarPointyBrickTest : GLMonoBehaviour
{
	public MeshTileCell cellPrefab;
	public PolarGridProperties polarGridProperties;
	public int size;
	protected IGrid<MeshTileCell, PointyHexPoint> grid;
	protected IPolarMap<PointyHexPoint> polarMap;
	protected IMap3D<PointyHexPoint> map;

	public void Start()
	{
		grid = PolarGrid.TriangularPolarGrid<MeshTileCell>(size);
		polarMap = new TriangularPolarPointyBrickMap(
			transform.position.To2DXY(), 
			polarGridProperties.innerRadius,
			polarGridProperties.outerRadius, 
			1, 
			size);

		map = polarMap.To3DXY();

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

			float innerRadius = polarMap.GetInnerRadius(point) + polarGridProperties.border / 2;
			float outerRadius = polarMap.GetOuterRadius(point) - polarGridProperties.border / 2;
			float startAngle = polarMap.GetStartAngleZ(point);
			float endAngle = polarMap.GetEndAngleZ(point) - polarGridProperties.border * Mathf.Rad2Deg / outerRadius;
			int quadCount = Mathf.CeilToInt(outerRadius * 2 * Mathf.PI / (polarGridProperties.quadSize * size));

			Mesh mesh = new Mesh();
			MeshUtils.MakeBandedSector(mesh, startAngle, endAngle, innerRadius, outerRadius, quadCount, v => TriangularPolarPointyBrickMap.InverseTransform(v, polarGridProperties.outerRadius));
			cell.GetComponent<MeshFilter>().sharedMesh = mesh;
			cell.Color = GridBuilderUtils.DefaultColors[point.GetColor3_7()];

			cell.name = point.ToString();
			cell.__CenterOffset = map[point];

			grid[point] = cell;
		}
	}

	public void Update()
	{
		if (Input.GetMouseButtonDown(0))
		{
			var mousePosition = Input.mousePosition;
			var worldPosition = GridBuilderUtils.ScreenToWorld(mousePosition);

			var gridPoint = map[worldPosition];
			
			if (grid.Contains(gridPoint))
			{
				grid[gridPoint].Color = Color.black;
			}
		}
	}
}
