﻿#if UNITY_EDITOR
using ABI.CCK.Scripts;
using UnityEditor;
using UnityEngine;
using AnimatorController = UnityEditor.Animations.AnimatorController;

namespace ABI.CCK.Components
{
    public partial class CCK_CVRAvatarEditor
    {
        // store so we can also know when an undo/redo happened
        private RuntimeAnimatorController _lastBaseController;
        private RuntimeAnimatorController _lastOverrideController;

        private void DrawAutogenControllerFields()
        {
            RuntimeAnimatorController tempBaseController = EditorGUILayout.ObjectField(
                L("BaseController").text,
                m_baseControllerProp.objectReferenceValue, 
                typeof(RuntimeAnimatorController), 
                false) as RuntimeAnimatorController;

            if (tempBaseController is not AnimatorOverrideController 
                && tempBaseController != m_baseControllerProp.objectReferenceValue)
                m_baseControllerProp.objectReferenceValue = tempBaseController;

            EditorGUILayout.HelpBox(L("BaseControllerInfo").text, MessageType.Info);

            RuntimeAnimatorController tempOverrideController = EditorGUILayout.ObjectField(
                L("OverrideController").text,
                m_baseOverrideControllerProp.objectReferenceValue, 
                typeof(RuntimeAnimatorController), 
                false) as RuntimeAnimatorController;

            if (tempOverrideController is not AnimatorController
                && tempOverrideController != m_baseOverrideControllerProp.objectReferenceValue)
                m_baseOverrideControllerProp.objectReferenceValue = tempOverrideController;

            EditorGUILayout.HelpBox(L("OverrideControllerInfo").text, MessageType.Info);

            if (_lastBaseController == m_baseControllerProp.objectReferenceValue
                && _lastOverrideController == m_baseOverrideControllerProp.objectReferenceValue) 
                return;
            
            // change detected (undo/redo, inspector change, etc.)
            _lastBaseController = m_baseControllerProp.objectReferenceValue as RuntimeAnimatorController;
            _lastOverrideController = m_baseOverrideControllerProp.objectReferenceValue as RuntimeAnimatorController;
            
            serializedObject.ApplyModifiedProperties(); // update backing fields
            UpdateSyncUsageAndBaseParameters(); // update the sync usage and base parameters
        }
        
        private void DrawCreateControllerButton()
        {
            if (_syncedBitsTuple.Item2 <= CVRCommon.AVATAR_BIT_LIMIT)
            {
                if (GUILayout.Button(L("CreateController").text))
                    CreateAASController();
            }
            else
            {
                using (new EditorGUI.DisabledScope(true))
                    GUILayout.Button(L("CreateController").text);
                EditorGUILayout.HelpBox(L("OverSyncedBitLimit").text, MessageType.Warning);
                GUILayout.Space(5);
            }

            if (_avatar.avatarSettings.overrides == null ||
                _avatar.avatarSettings.overrides == _avatar.overrides) return;
            
            if (GUILayout.Button(L("AttachCreatedOverrideToAvatar").text))
                m_OverridesProp.objectReferenceValue = _avatar.avatarSettings.overrides;
        }
    }
}
#endif