using System;
using UnityEngine;
using UnityEngine.Scripting;

namespace TyphoonUnitySDK
{
    [Preserve]
    public class XiZhongYouSdk : BaseSdk
    {
        public XiZhongYouCallBack CallbackInstance;

        public AndroidInstance AndroidInstance;

        private Action OnVideoSuccess { get; set; } //视频成功回调

        private Action<string> OnVideoFail { get; set; } //激励视频失败回调

        //初始化
        public override void OnCreate()
        {
            SdkDebug.Log("on create xi zhong you sdk ...");
            //创建回调
            CallbackInstance = XiZhongYouCallBack.CreateInstance();
            CallbackInstance.gameObject.name = "TYPHOON_SDK_CALL_BACK";
            CallbackInstance.Initialize(ReceivePayCallBackResult, HandleVideoCallback);
            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("init sdk ... return  success");
            //直接成功
            success?.Invoke();
        }

        #endregion

        #region 登录

        public override void Login(Action success, Action<string> fail)
        {
            SdkDebug.Log("login... return  success");
            success?.Invoke();
        }

        #endregion

        #region 退出游戏

        public override bool IsSupportExitGame()
        {
            SdkDebug.Log("IsSupportExitGame return false");
            return false;
        }

        public override void ExitGame()
        {
            SdkDebug.Log("ExitGame fail , not support");

            // AndroidInstance.Call("exitGame");
        }

        #endregion

        #region Banner

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

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

        #endregion

        #region 视频广告

        public override bool GetVideoFlag()
        {
            SdkDebug.Log($"GetVideoFlag ... return true");
            return true;
            // 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...");
            OnVideoSuccess = success;
            OnVideoFail = fail;
            AndroidInstance.Call("showVideo");
        }


        private void HandleVideoCallback(string state)
        {
            //视频回调，返回“1”为成功，其它字符串为失败原因
            SdkDebug.Log($"HandleVideoCallback  state : {state}");
            var success = OnVideoSuccess;
            var fail = OnVideoFail;
            OnVideoSuccess = null;
            OnVideoFail = null;
            if (state == "1")
            {
                success?.Invoke();
            }
            else
            {
                fail?.Invoke(state);
            }
        }

        #endregion

        #region 插页广告

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

        #endregion

        #region 事件上报

        public override void Track(string eventName, KvMap map)
        {
            var json = map.ToXJson();
            AndroidInstance.Call("trackEvent", eventName, json);
        }
        
        #endregion

        #region 支付回调

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

        #endregion
    }
}