using UnityEditor.UIElements;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
using UnityEngine.UIElements;
namespace UnityEditor.Rendering.Universal
{
    [CustomPropertyDrawer(typeof(RenderGraphSettings))]
    class RenderGraphPropertyDrawer : PropertyDrawer
    {
        VisualElement m_Root;
        private const string k_EnableRenderCompatibilityPropertyName = "m_EnableRenderCompatibilityMode";
        private const string k_EnableRenderCompatibilityModeLabel = "Compatibility Mode (Render Graph Disabled)";
        private const string k_EnableRenderCompatibilityModeHelpBoxLabel = "Unity no longer develops or improves the rendering path that does not use Render Graph API. Use the Render Graph API when developing new graphics features.";
        bool m_EnableCompatibilityModeValue;
        /// 
        public override VisualElement CreatePropertyGUI(SerializedProperty property)
        {
            m_Root = new VisualElement();
            var enableCompatilityModeProp = property.FindPropertyRelative(k_EnableRenderCompatibilityPropertyName);
            var enableCompatibilityMode = new PropertyField(enableCompatilityModeProp, k_EnableRenderCompatibilityModeLabel);
            // UITK raises ValueChangeCallback at various times, so we need to track the actual value
            m_EnableCompatibilityModeValue = enableCompatilityModeProp.boolValue;
            m_Root.Add(enableCompatibilityMode);
            enableCompatibilityMode.RegisterValueChangeCallback((onchanged) =>
            {
                m_Root.Q("HelpBoxWarning").style.display = (onchanged.changedProperty.boolValue) ? DisplayStyle.Flex : DisplayStyle.None;
                bool newValue = onchanged.changedProperty.boolValue;
                if (m_EnableCompatibilityModeValue != newValue)
                {
                    m_EnableCompatibilityModeValue = newValue;
                    GraphicsSettings.GetRenderPipelineSettings()?.NotifyValueChanged(onchanged.changedProperty.name);
                }
            });
            m_Root.Add(new HelpBox(k_EnableRenderCompatibilityModeHelpBoxLabel, HelpBoxMessageType.Warning)
            {
                name = "HelpBoxWarning"
            });
            return m_Root;
        }
    }
}