﻿#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.PackageManager;
using UnityEditor.PackageManager.Requests;
using UnityEngine;
using static ABI.CCK.Scripts.Editor.SharedComponentGUI;

namespace ABI.CCK.Components
{
    public partial class CCK_CVRLTCGIAdapterEditor
    {
        private static AddRequest _addRequest;
        
        private void Draw_MissingLtcgi()
        {
            using (new LabelScope("Missing LTCGI"))
                DrawMissingLtcgi();
        }

        #region Drawing Methods

        private void DrawMissingLtcgi()
        {
            EditorGUILayout.HelpBox("LTCGI was not found in the project. Please install it to use this component.", MessageType.Error);
            using (new EditorGUILayout.HorizontalScope())
            {
                if (GUILayout.Button("Open LTCGI Repo")) Application.OpenURL(KAFE_LTCGI_REPO_URL);
                    
                bool isUpmImportInProgress = _addRequest is { IsCompleted: false };
                using (new EditorGUI.DisabledScope(isUpmImportInProgress))
                {
                    string buttonText = isUpmImportInProgress ? "Importing..." : "Import LTCGI via UPM";
                    if (GUILayout.Button(buttonText))
                    {
                        _addRequest = Client.Add(KAFE_LTCGI_GIT_URL);
                        EditorApplication.update += ProgressCheck;
                    }
                }

            }
            EditorGUILayout.Space(5);
            EditorGUILayout.HelpBox("If the UPM installation fails due lack of git installed, you can " +
                                    "download and import the Unity 2021 LTCGI UnityPackage manually here.", MessageType.Info);
            if (GUILayout.Button("Download Unity 2021 LTCGI UnityPackage"))
                Application.OpenURL(KAFE_LTCGI_GIT_RELEASES_URL);
        }

        #endregion Drawing Methods
        
        #region Progress Check
        
        private static void ProgressCheck()
        {
            if (!_addRequest.IsCompleted) 
                return;

            if (_addRequest.Status == StatusCode.Success) 
                Debug.Log("Installed: " + _addRequest.Result.packageId);
            else if (_addRequest.Status >= StatusCode.Failure) 
                Debug.LogError("Failed to install package: " + _addRequest.Error.message);

            _addRequest = null;
            EditorApplication.update -= ProgressCheck;
        }
        
        #endregion Progress Check
    }
}
#endif