using UnityEngine;
using UnityEngine.Serialization;

namespace IGP.UnitySDK
{
    public enum IGPSDKEnvironment
    {
        PROD = 0,
        DEV = 1,
        PREVIEW = 2,
    }

    public enum IGPHostSessionPlatform
    {
        Desktop = 0,
        Mobile = 1,
    }

    [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("Backend 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("Host Session")]
        [Tooltip("Local host platform that supplies authenticated SDK capabilities and Hosted data-plane access.")]
        public IGPHostSessionPlatform hostSessionPlatform = IGPHostSessionPlatform.Desktop;

        [Tooltip("Required application identifier used to attach host 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;

        [HideInInspector]
        [Tooltip("DEV-only Curio API base URL override used by direct Core capabilities.")]
        public string curioApiBaseUrlDebugOverride = string.Empty;
    }
}
