using Unity.PlasticSCM.Editor.Inspector.Properties;
using Unity.PlasticSCM.Editor.Settings;
using Unity.PlasticSCM.Editor.UI;
using UnityEditor;

namespace Unity.PlasticSCM.Editor
{
    internal static class SwitchUVCSPlugin
    {
        internal static UVCSWindow On(UVCSPlugin uvcsPlugin)
        {
            uvcsPlugin.Enable();

            UVCSWindow window = ShowWindow.UVCS();

            UVCSPluginIsEnabledPreference.Enable();

            return window;
        }

        internal static UVCSWindow OnIfNeeded(UVCSPlugin uvcsPlugin)
        {
            if (!UVCSPluginIsEnabledPreference.IsEnabled())
            {
                UVCSWindow result = On(uvcsPlugin);
                ReloadSettings();
                return result;
            }

            return ShowWindow.UVCS();
        }

        internal static void Off(UVCSPlugin uvcsPlugin)
        {
            UVCSPluginIsEnabledPreference.Disable();

            CloseWindowIfOpened.UVCS();
            CloseWindowIfOpened.BranchExplorer();

            CleanSelectionIfNeeded();

            uvcsPlugin.Shutdown();
        }

        static void ReloadSettings()
        {
            UVCSProjectSettingsProvider activeSettingsProvider =
                UVCSPlugin.Instance.ActiveUVCSSettingsProvider;

            if (activeSettingsProvider == null)
                return;

            activeSettingsProvider.ReloadSettings();
            activeSettingsProvider.Repaint();
        }

        static void CleanSelectionIfNeeded()
        {
            if (!(Selection.activeObject is SelectedRepObjectInfoData))
                return;

            Selection.activeObject = null;
        }
    }
}