using UnityEngine;
using UnityEngine.Serialization;

namespace IGP.UnitySDK
{
    [CreateAssetMenu(fileName = "IGPConfig", menuName = "IGP/Config", order = 0)]
    public class IGPConfig : ScriptableObject
    {
        public const string DefaultAuthorizationFailureFallbackTitle = "Network unavailable";
        public const string DefaultAuthorizationFailureFallbackMessage =
            "Network is currently unavailable. Please check your connection and try again.";
        public const string DefaultAuthorizationFailureFallbackHint =
            "Please check your network connection and retry authorization.";
        public const string DefaultAuthorizationFailureFallbackButtonText = "Retry";
        public const string DefaultAuthorizationFailureFallbackQuitButtonText = "Quit";

        [Header("SDK")]
        [Tooltip("Desktop environment used by the SDK.")]
        public IGPSDKEnvironment sdkEnvironment = IGPSDKEnvironment.PROD;

        [Tooltip("Optional SDK diagnostic log level. Production builds should normally use Off.")]
        public IGPLogLevel debugLogging = IGPLogLevel.Off;

        [Header("Authorization Fallback")]
        public bool showAuthorizationFailureFallback = true;
        public string authorizationFailureFallbackTitle = DefaultAuthorizationFailureFallbackTitle;
        public string authorizationFailureFallbackMessage = DefaultAuthorizationFailureFallbackMessage;
        public string authorizationFailureFallbackHint = DefaultAuthorizationFailureFallbackHint;
        public string authorizationFailureFallbackButtonText = DefaultAuthorizationFailureFallbackButtonText;
        public string authorizationFailureFallbackQuitButtonText = DefaultAuthorizationFailureFallbackQuitButtonText;

        [Header("Desktop Session")]
        [Tooltip("Required application identifier used to attach desktop capabilities.")]
        public int appId;

        [HideInInspector]
        public bool desktopSessionAutoAttach = true;

        [HideInInspector]
        public string desktopPipeEndpoint = string.Empty;

        [HideInInspector]
        [FormerlySerializedAs("desktopExecutablePathOverride")]
        public string desktopExecutablePathDebugOverride = string.Empty;

        [HideInInspector]
        public string desktopLaunchCommand = string.Empty;
    }
}
