using System.Linq;
using System.Numerics;
using UnityEngine;

namespace Thirdweb.Unity
{
    public class ThirdwebManagerServer : ThirdwebManagerBase
    {
        [field: SerializeField]
        private string SecretKey { get; set; }

        public static new ThirdwebManagerServer Instance
        {
            get => ThirdwebManagerBase.Instance as ThirdwebManagerServer;
        }

        protected override ThirdwebClient CreateClient()
        {
            if (string.IsNullOrEmpty(SecretKey))
            {
                ThirdwebDebug.LogError("SecretKey must be set in order to initialize ThirdwebManagerServer.");
                return null;
            }

            return ThirdwebClient.Create(
                secretKey: SecretKey,
                httpClient: new CrossPlatformUnityHttpClient(),
                sdkName: Application.platform == RuntimePlatform.WebGLPlayer ? "UnitySDK_WebGL" : "UnitySDK",
                sdkOs: Application.platform.ToString(),
                sdkPlatform: "unity",
                sdkVersion: THIRDWEB_UNITY_SDK_VERSION,
                rpcOverrides: (RpcOverrides == null || RpcOverrides.Count == 0)
                    ? null
                    : RpcOverrides.ToDictionary(rpcOverride => new BigInteger(rpcOverride.ChainId), rpcOverride => rpcOverride.RpcUrl)
            );
        }

        public override string MobileRedirectScheme => "tw-server://";
    }
}
