#if UNITY_EDITOR
#if !UNITY_2018_3_OR_NEWER
	#define SUPPORT_SCENE_VIEW_GIZMOS_CAPTURE
#endif
using UnityEngine;
using UnityEditor;

//-----------------------------------------------------------------------------
// Copyright 2012-2022 RenderHeads Ltd.  All rights reserved.
//-----------------------------------------------------------------------------

namespace RenderHeads.Media.AVProMovieCapture.Editor
{
	[CanEditMultipleObjects]
	[CustomEditor(typeof(CameraSelector))]
	public class CameraSelectorEditor : UnityEditor.Editor
	{
		private SerializedProperty _propSelectBy;
		private SerializedProperty _propScanFrequency;
		private SerializedProperty _propScanHiddenCameras;
		private SerializedProperty _propTag;
		private SerializedProperty _propName;
		private SerializedProperty _propCamera;

		void OnEnable()
		{
			_propSelectBy = serializedObject.AssertFindProperty("_selectBy");
			_propScanFrequency = serializedObject.AssertFindProperty("_scanFrequency");
			_propScanHiddenCameras = serializedObject.AssertFindProperty("_scanHiddenCameras");
			_propTag = serializedObject.AssertFindProperty("_tag");
			_propName = serializedObject.AssertFindProperty("_name");
			_propCamera = serializedObject.AssertFindProperty("_camera");
		}

		public override void OnInspectorGUI()
		{
			serializedObject.Update();

			EditorGUILayout.PropertyField(_propScanFrequency);
			EditorGUILayout.PropertyField(_propScanHiddenCameras);
			EditorGUILayout.PropertyField(_propSelectBy);
			if (_propSelectBy.enumValueIndex == (int)CameraSelector.SelectByMode.Name)
			{
				EditorGUILayout.PropertyField(_propName);
			}
			else if (_propSelectBy.enumValueIndex == (int)CameraSelector.SelectByMode.Tag)
			{
				EditorGUILayout.PropertyField(_propTag);
			}
			else if (_propSelectBy.enumValueIndex == (int)CameraSelector.SelectByMode.Manual)
			{
				EditorGUILayout.PropertyField(_propCamera);
			}
#if !SUPPORT_SCENE_VIEW_GIZMOS_CAPTURE
			else if (_propSelectBy.enumValueIndex == (int)CameraSelector.SelectByMode.EditorSceneView)
			{
				GUI.color = Color.yellow;
				GUILayout.TextArea("Warning: Scene View capture only currently supports gizmo capture up to Unity 2018.2.x");
				GUI.color = Color.white;
			}
#endif
			if (Application.isPlaying)
			{
				EditorGUILayout.Separator();

				GUILayout.Label("Cameras:");

				CameraSelector selector = (this.target) as CameraSelector;

				// Display buttons for all possible cameras
				for (int i = 0; i < selector.CameraCacheCount; i++)
				{
					if (selector.Camera != selector.CameraCache[i])
					{
						if (GUILayout.Button(selector.CameraCache[i].name))
						{
							selector.Camera = selector.CameraCache[i];
						}
					}
					else
					{
						GUI.color = Color.green;
						GUILayout.Button(selector.Camera.name);
						GUI.color = Color.white;
					}
				}

				EditorGUILayout.Separator();
				if (_propScanFrequency.enumValueIndex != (int)CameraSelector.ScanFrequencyMode.Frame)
				{
					if (GUILayout.Button("Update Camera List"))
					{
						selector.UpdateCameraCache();
					}
				}
			}

			serializedObject.ApplyModifiedProperties();
		}
	}
}
#endif