// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

using UnityEditor;
using UnityEngine;

namespace Microsoft.MixedReality.WebRTC.Unity.Editor
{
    /// <summary>
    /// Inspector editor for <see cref="VideoRenderer"/>.
    /// </summary>
    [CustomEditor(typeof(VideoRenderer))]
    [CanEditMultipleObjects]
    public class VideoRendererEditor : UnityEditor.Editor
    {
        SerializedProperty _maxFramerate;
        SerializedProperty _enableStatistics;
        SerializedProperty _frameLoadStatHolder;
        SerializedProperty _framePresentStatHolder;
        SerializedProperty _frameSkipStatHolder;

        void OnEnable()
        {
            _maxFramerate = serializedObject.FindProperty("MaxFramerate");
            _enableStatistics = serializedObject.FindProperty("EnableStatistics");
            _frameLoadStatHolder = serializedObject.FindProperty("FrameLoadStatHolder");
            _framePresentStatHolder = serializedObject.FindProperty("FramePresentStatHolder");
            _frameSkipStatHolder = serializedObject.FindProperty("FrameSkipStatHolder");
        }

        /// <summary>
        /// Override implementation of <a href="https://docs.unity3d.com/ScriptReference/Editor.OnInspectorGUI.html">Editor.OnInspectorGUI</a>
        /// to draw the inspector GUI for the currently selected <see cref="MicrophoneSource"/>.
        /// </summary>
        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            GUILayout.Space(10);

            EditorGUILayout.LabelField("Video", EditorStyles.boldLabel);
            EditorGUILayout.PropertyField(_maxFramerate);

            GUILayout.Space(10);

            EditorGUILayout.PropertyField(_enableStatistics);
            if (_enableStatistics.boolValue)
            {
                using (new EditorGUI.IndentLevelScope())
                {
                    EditorGUILayout.PropertyField(_frameLoadStatHolder);
                    EditorGUILayout.PropertyField(_framePresentStatHolder);
                    EditorGUILayout.PropertyField(_frameSkipStatHolder);
                }
            }

            serializedObject.ApplyModifiedProperties();
        }
    }
}