﻿using Gamelogic.Grids;
using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(Grid))]
public class GridEditor : Editor
{
	private bool showDimensions = true;
	private bool showColorFunction = true;

	override public void OnInspectorGUI()
	{
		var grid = (Grid) target;

		serializedObject.Update();

		grid.cellPrefab = (Cell) EditorGUILayout.ObjectField("Cell Prefab", grid.cellPrefab, typeof (Cell), true);
		grid.shape = (Grid.Shape)EditorGUILayout.EnumPopup("Shape", grid.shape);

		showDimensions = EditorGUILayout.Foldout(showDimensions, "Dimenions");
		
		if (showDimensions)
		{
			EditorGUI.indentLevel++;
			var dimensions = grid.dimensions.GetVectorPoint();
			int x = EditorGUILayout.IntField("Width", dimensions.X);

			if (x < 0)
				x = 0;

			int y = EditorGUILayout.IntField("Height", dimensions.Y);

			if (y < 0)
				y = 0;
		
			grid.dimensions.x = x;
			grid.dimensions.y = y;
			EditorGUI.indentLevel--;
		}

		grid.plane = (Grid.Plane)EditorGUILayout.EnumPopup("Plane", grid.plane);
		grid.alignment = (Grid.Alignment)EditorGUILayout.EnumPopup("Alignment", grid.alignment);
		grid.cellSpacingFactor = EditorGUILayout.FloatField("Cell Spacing Factor", grid.cellSpacingFactor);

		var myIterator = serializedObject.FindProperty("colors");

		bool showChildren = true;

		showColorFunction = EditorGUILayout.Foldout(showColorFunction, "Color Function");

		if (showColorFunction)
		{
			EditorGUI.indentLevel++;

			var colorFuncX0 = EditorGUILayout.IntField("X0", grid.colorFuncX0);
			var colorFuncX1 = EditorGUILayout.IntField("X1", grid.colorFuncX1);
			var colorFuncY1 = EditorGUILayout.IntField("Y1", grid.colorFuncY1);

			if (colorFuncX0 < 1) colorFuncX0 = 1;
			if (colorFuncX1 < 1) colorFuncX1 = 1;
			if (colorFuncY1 < 1) colorFuncY1 = 1;

			grid.colorFuncX0 = colorFuncX0;
			grid.colorFuncX1 = colorFuncX1;
			grid.colorFuncY1 = colorFuncY1;

			EditorGUI.indentLevel--;
		}

		do
		{
			var myRect = GUILayoutUtility.GetRect(0f, 16f);
			showChildren = EditorGUI.PropertyField(myRect, myIterator);
		} while (myIterator.NextVisible(showChildren));

		serializedObject.ApplyModifiedProperties();

		if (GUI.changed)
		{
			grid.BuildGrid();
		}
	}
}
