using System;
using UnityEngine;
using UnityEngine.Scripting;

namespace TyphoonUnitySDK
{
    /// <summary>
    /// 国内安卓
    /// </summary>
    [Preserve]
    public class ChinaAndroidSdk : BaseSdk
    {
        public TyphoonSdkCallback CallbackInstance;

        public AndroidInstance AndroidInstance;

        private long _showVideoSessionId = -1;

        //初始化
        public override void OnCreate()
        {
            SdkDebug.Log("on create china android sdk ...");
            //创建回调
            CallbackInstance = TyphoonSdkCallback.CreateInstance();
            CallbackInstance.gameObject.name = "TYPHOON_SDK_CALL_BACK";
            CallbackInstance.Initialize(ReceivePayCallBackResult);
            GameObject.DontDestroyOnLoad(CallbackInstance.gameObject);
            //创建android实例
            AndroidInstance = AndroidInstance.CreateInstance();
            AndroidInstance.gameObject.name = "TYPHOON_SDK_ANDROID_INSTANCE";
            AndroidInstance.Initialize();
            GameObject.DontDestroyOnLoad(AndroidInstance.gameObject);
            SdkDebug.Log("on create china android sdk success");
        }


        #region 初始化SDK

        public override void InitSdk(Action success, Action<string> fail)
        {
            SdkDebug.Log("InitSdk");
            AndroidInstance.CallWithSession(new SessionItem("initSdk", null, (res) =>
            {
                if (res == "ok")
                {
                    success?.Invoke();
                }
                else
                {
                    fail?.Invoke(res);
                }
            }));
        }

        #endregion

        #region 登录

        public override void Login(Action success, Action<string> fail)
        {
            SdkDebug.Log("Login");
            AndroidInstance.CallWithSession(new SessionItem("login", null, (res) =>
            {
                if (res == "ok")
                {
                    success?.Invoke();
                }
                else
                {
                    fail?.Invoke(res);
                }
            }));
        }

        #endregion

        #region 退出游戏

        public override bool IsSupportExitGame()
        {
            SdkDebug.Log("IsSupportExitGame");
            return AndroidInstance.CallReturn<bool>("isSupportExitGame");
        }

        public override void ExitGame()
        {
            SdkDebug.Log("ExitGame");
            AndroidInstance.Call("exitGame");
        }

        #endregion

        #region Banner

        public override void ShowBanner(string scene, BannerPosition position)
        {
            SdkDebug.Log("ShowBanner");
            AndroidInstance.Call("showBanner", scene, ((int)position));
        }

        public override void HideBanner(string scene)
        {
            SdkDebug.Log("HideBanner");
            AndroidInstance.Call("hideBanner", scene);
        }

        #endregion

        #region 视频广告

        public override bool GetVideoFlag()
        {
            var flag = AndroidInstance.CallReturn<bool>("getVideoFlag");
            SdkDebug.Log($"GetVideoFlag,flag:{flag}");
            return flag;
        }

        public override void ShowVideo(string scene, Action success, Action<string> fail)
        {
            SdkDebug.Log("ShowVideo");
            SessionItem.ClearSession(_showVideoSessionId);
            var sessionItem = new SessionItem("showVideo", scene, (res) =>
            {
                if (res == "ok")
                {
                    SdkDebug.Log($"show video success scene:{scene}");
                    success?.Invoke();
                }
                else
                {
                    SdkDebug.Log($"show video fail {res} scene:{scene}");
                    fail?.Invoke(res);
                }
            });
            _showVideoSessionId = sessionItem.SessionId;
            AndroidInstance.CallWithSession(sessionItem);
        }

        #endregion

        #region 插页广告

        public override void ShowInters(string scene)
        {
            SdkDebug.Log("ShowInters");
            AndroidInstance.Call("showInters", scene);
        }

        #endregion

        #region 悬浮ICON

        public override void ShowFloatIcon(string scene, float screenXP, float screenYP)
        {
            SdkDebug.Log($"ShowFloatIcon spx:{screenXP}, spy:{screenYP}");
            AndroidInstance.Call("showFloatIcon", scene, screenXP, screenYP);
        }

        public override void HideFloatIcon(string scene)
        {
            SdkDebug.Log("HideFloatIcon");
            AndroidInstance.Call("hideFloatIcon", scene);
        }

        #endregion

        #region 原生模板

        public override void ShowNative(string scene)
        {
            SdkDebug.Log("ShowNative");
            AndroidInstance.Call("showNative", scene);
        }

        public override void HideNative(string scene)
        {
            SdkDebug.Log("HideNative");
            AndroidInstance.Call("hideNative", scene);
        }

        #endregion

        #region 退出挽留

        public override bool IsSupportQuitWithKeep()
        {
            var flag = AndroidInstance.CallReturn<bool>("isSupportQuitWithKeep");
            SdkDebug.Log($"IsSupportQuitWithKeep,flag:{flag}");
            return flag;
        }

        public override void QuitWithKeep()
        {
            AndroidInstance.Call("quitWithKeep");
        }

        #endregion

        #region 事件上报

        public override void Track(string eventName, KvMap map)
        {
            SdkDebug.Log($"Track... eventName:{eventName}");
            var data = new
            {
                event_name = eventName,
                data = map
            };
            var json = data.ToXJson();
            AndroidInstance.Call("logEvent", json);
        }

        #endregion

        #region 支付回调

        public override void ReceivePayCallBackResult(PayCallBackResult result)
        {
            //TODO//处理支付回调！！！！
            foreach (var item in result.items)
            {
            }
        }

        #endregion
    }
}