using UnityEditor;
using UnityEngine;

namespace Pathfinding {
	[CustomPropertyDrawer(typeof(GraphMask))]
	public class GraphMaskDrawer : PropertyDrawer {
		string[] graphLabels = new string[32];

		public override void OnGUI (Rect position, SerializedProperty property, GUIContent label) {
			// Make sure the AstarPath object is initialized and the graphs are loaded, this is required to be able to show graph names in the mask popup
			AstarPath.FindAstarPath();

			for (int i = 0; i < graphLabels.Length; i++) {
				if (AstarPath.active == null || AstarPath.active.data.graphs == null || i >= AstarPath.active.data.graphs.Length || AstarPath.active.data.graphs[i] == null) graphLabels[i] = "Graph " + i + (i == 31 ? "+" : "");
				else {
					graphLabels[i] = AstarPath.active.data.graphs[i].name + " (graph " + i + ")";
				}
			}

			EditorGUI.BeginChangeCheck();
			EditorGUI.showMixedValue = property.hasMultipleDifferentValues;
			var valueProp = property.FindPropertyRelative("value");
			int newVal = EditorGUI.MaskField(position, label, valueProp.intValue, graphLabels);
			if (EditorGUI.EndChangeCheck()) {
				valueProp.intValue = newVal;
			}
			EditorGUI.showMixedValue = false;
		}
	}
}