using UnityEngine;

namespace Gamelogic.Grids.Examples
{
	public class RingPointyHexMap : TransformedMap<PointyHexPoint>
	{
		private class MapData
		{
			private readonly float width;
			private readonly float radius;

			public MapData(IGrid<PointyHexPoint> grid, Vector2 cellDimensions, float radius)
			{
				var map2D = new PointyHexMap(cellDimensions);
				
				width = map2D.CalcGridDimensions(grid).x - cellDimensions.x/2;
				this.radius = radius;
			}

			public Vector3 To3D(Vector3 point)
			{
				float u = point.x;
				float v = point.y;
				float w = point.z;

				float newY = v;
				float newX = (radius + w)* Mathf.Cos(u / width * Mathf.PI * 2);
				float newZ = (radius + w) * Mathf.Sin(u / width * Mathf.PI * 2);

				return new Vector3(newX, newY, newZ);
				//return new Vector3(u, v, 0);
			}
		}

		public RingPointyHexMap(IGrid<PointyHexPoint> grid, Vector2 cellDimensions, float radius):
			base( 
			new PointyHexMeshMap(cellDimensions, new PointyHexMap(cellDimensions)), 
			new MapData(grid, cellDimensions, radius).To3D)
		{
		}		
	}
}