﻿#region Header

// Copyright (c) 2021-2022 AccelByte Inc. All Rights Reserved.
// This is licensed software from AccelByte Inc, for limitations
// and restrictions contact your company contract manager.

#endregion

using System.Diagnostics;
using System.IO;
using UnityEngine;
using UnityEngine.Assertions;
using UnityEditor;
using Debug = UnityEngine.Debug;

namespace BlackBox
{
    public class ConfigurationMenu : Editor
    {
        #region Menu Item Methods

        [MenuItem("Tools/BlackBox/Properties")]
        public static void ShowSceneLoader()
        {
            ConfigurationWindow.ShowSceneLoader();
        }

        // TODO: Convert this to unit tests
        [MenuItem("Tools/BlackBox/Validate")]
        public static void ValidateSDK()
        {
            // Validate BlackBoxConfig
            Validate(BlackBoxConfig.Instance);
            Logger.Log("BlackBoxConfig PASSED");

            // Validate BlackBox ini file
            Validate(PluginManager.GetConfigPath());
            Logger.Log("BlackBox.init PASSED");
        }

        #endregion Menu Item Methods

        #region Validations

        public static void Validate(BlackBoxConfig config)
        {
            Assert.IsNotNull(config);
            Assert.IsTrue(config.Namespace.IsSafeString(), $"Invalid Namespace:{config.Namespace}");
            Assert.IsTrue(config.ApiKey.IsSafeString(), $"Invalid ApiKey:{config.ApiKey}");
            Assert.IsTrue(config.GameVersionId.IsSafeString(), $"Invalid GameVersionId:{config.GameVersionId}");
            Assert.IsTrue(config.BuildId.IsSafeString(), $"Invalid BuildId:{config.BuildId}");
            Assert.IsTrue(config.BaseUrl.IsSafeString(), $"Invalid BaseUrl:{config.BaseUrl}");
        }

        public static void Validate(string ini)
        {
            // TODO
            Logger.Log($"Validating {ini}");
        }
        #endregion Validations
    }
}
