using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using AOT;
using UnityEngine;
namespace Touka
{
    /// 
    /// 广告SDK内部处理
    /// 
    public class ToukaSDKAdapter : IToukaAdInterface
    {
        /// 
        /// banner 位置
        /// 
        public enum ToukaBannerAlign : int
        {
            BannerCenterBottomAlign = 34,
            BannerCenterTopAlign = 10,
        }
        // banner是否已展示
        private bool m_bannerHasShowed = false;
        // banner是否已加载
        private bool m_bannerLoaded = false;
        private System.Action m_bannerLoadCallback;       // banner加载回调
        private System.Action m_intersitialLoadCallback;  // 插屏加载回调
        private System.Action m_videoLoadCallback;        // 激励视频加载回调
        private System.Action m_nativeLoadCallback;       // native加载回调
        private System.Action m_videoShowCallback;        // 激励视频展示回调
        private System.Action m_intersitialShowCallback;        // 插屏展示回调
        private static ToukaSDKAdapter s_instance;
        public static ToukaSDKAdapter Instance
        {
            get
            {
                if (s_instance == null)
                {
                    s_instance = new ToukaSDKAdapter();
                }
                return s_instance;
            }
        }
        /// 
        /// init
        /// 
        public void Init()
        {
#if UNITY_IOS && !NO_SDK
            Debug.Log("[ToukaSDKAdapter] init iOS");
            ToukaCallbackInit();
            TGiOSAdManager.Instance.InitSDK(StaticStringsKey.TOUKA_SDK_APPID, StaticStringsKey.TOUKA_SDK_APPKEY);
#elif UNITY_ANDROID
        Debug.Log("[ToukaSDKAdapter] init android");
        ToukaCallbackInit();
        TGAndroidAdManager.Instance.InitSDK(StaticStringsKey.TOUKA_SDK_APPID,StaticStringsKey.TOUKA_SDK_APPKEY);
#endif
        }
        /// 
        /// sdk 回调
        /// 
        private void ToukaCallbackInit()
        {
            TGUniversalFunc.onSetNativeBannerListener_onAdLoaded += onNativeBannerAdLoaded;
            TGUniversalFunc.onSetNativeBannerListener_onAdLoadFail += onNativeBannerAdLoadFail;
            TGUniversalFunc.onSetBannerListener_onAdLoaded += onBannerAdLoad;
            TGUniversalFunc.onSetBannerListener_onAdFailedToLoad += onBannerAdLoadFail;
            TGUniversalFunc.onSetNativeListener_onAdLoaded += onNativeAdLoaded;
            TGUniversalFunc.onSetNativeListener_onAdFailedToLoad += onNativeAdLoadFail;
            TGUniversalFunc.onSetRewardListener_onRewardedVideoAdClosed += onRewardedVideoAdPlayClosed;
            TGUniversalFunc.onSetRewardListener_onRewardedVideoAdFailedToLoad += onRewardedVideoAdLoadFail;
            TGUniversalFunc.onSetRewardListener_onRewardedVideoAdLoaded += onRewardedVideoAdLoaded;
            TGUniversalFunc.onSetRewardListener_onRewardedVideoAdPlayFail += onRewardedVideoAdPlayFail;
            TGUniversalFunc.onSetRewardListener_onRewardedVideoStarted += onRewardedVideoAdPlayStart;
            TGUniversalFunc.onSetInterstitialListener_onAdClosed += onInterstitialAdClose;
            TGUniversalFunc.onSetInterstitialListener_onAdFailedToLoad += onInterstitialAdLoadFail;
            TGUniversalFunc.onSetInterstitialListener_onAdLoaded += onInterstitialAdLoad;
            TGUniversalFunc.onSetInterstitialListener_onShowFailed += onInterstitialAdFailedToShow;
            TGUniversalFunc.onSetInterstitialListener_onShowSuccess += onInterstitialAdShow;
        }
        #region 广告 IsReady 接口
        /// 
        /// 插屏 IsReady
        /// 
        /// 
        public bool IsReadyIntersitial()
        {
#if UNITY_IOS && !NO_SDK
            return TGiOSAdManager.Instance.IsReadyinterstitial(StaticStringsKey.TOUKA_SDK_INTERID);
#elif UNITY_ANDROID
        return TGAndroidAdManager.Instance.IsReadyinterstitial(StaticStringsKey.TOUKA_SDK_INTERID);
#endif
            return false;
        }
        /// 
        /// 激励视频 IsReady
        /// 
        /// 
        public bool IsReadyVideo()
        {
#if UNITY_IOS && !NO_SDK
            return TGiOSAdManager.Instance.IsReadyVideo(StaticStringsKey.TOUKA_SDK_REWARDID);
#elif UNITY_ANDROID
        return TGAndroidAdManager.Instance.IsReadyVideo(StaticStringsKey.TOUKA_SDK_REWARDID) ;
#endif
            return false;
        }
        /// 
        /// banner IsReady
        /// 
        /// 
        public bool IsReadyBanner()
        {
            return m_bannerLoaded;
        }
        /// 
        /// native IsReady
        /// 
        /// 
        public bool IsReadyNative()
        {
#if UNITY_IOS && !NO_SDK
            return TGiOSAdManager.Instance.IsReadNative(StaticStringsKey.TOUKA_SDK_NATIVEID);
#elif UNITY_ANDROID
        return TGAndroidAdManager.Instance.IsReadNative(StaticStringsKey.TOUKA_SDK_NATIVEID) ;
#endif
            return false;
        }
        #endregion
        #region 广告展示 Show 接口
        /// 
        /// 展示插屏
        /// 
        ///  插屏播放回调 
        public void ShowIntersitial(Action _callback)
        {
            m_intersitialShowCallback = _callback;
#if UNITY_IOS && !NO_SDK
            TGiOSAdManager.Instance.Showinterstitial(StaticStringsKey.TOUKA_SDK_INTERID);
#elif UNITY_ANDROID
        TGAndroidAdManager.Instance.Showinterstitial(StaticStringsKey.TOUKA_SDK_INTERID);
#endif
        }
        /// 
        /// 展示激励视频
        /// 
        ///  激励视频播放回调 
        public void ShowVideo(Action _callback)
        {
            m_videoShowCallback = _callback;
#if UNITY_IOS && !NO_SDK
            TGiOSAdManager.Instance.ShowVideo(StaticStringsKey.TOUKA_SDK_REWARDID);
#elif UNITY_ANDROID
        TGAndroidAdManager.Instance.ShowVideo(StaticStringsKey.TOUKA_SDK_REWARDID);
#endif
        }
        /// 
        /// 展示banner
        /// 
        public void ShowBanner()
        {
            if (m_bannerHasShowed == false)
            {
#if UNITY_IOS
#if NORMAL_BANNER
                    TGiOSAdManager.Instance.SetBannerAlign(ToukaBannerAlign.BannerCenterBottomAlign.ToString());
                    TGiOSAdManager.Instance.ShowBannerWithUnitId(StaticStringsKey.TOUKA_SDK_BANNERID);
                    m_bannerHasShowed = true;
#elif NATIVE_BANNER
                    TGiOSAdManager.Instance.SetNativeBannerAlign(((int)ToukaBannerAlign.BannerCenterBottomAlign).ToString());
                    TGiOSAdManager.Instance.ShowNativeBannerWithUnitId(StaticStringsKey.TOUKA_SDK_BANNERID);
                    m_bannerHasShowed = true;
#endif
#elif UNITY_ANDROID
            TGAndroidAdManager.Instance.ShowBannerWithUnitId(StaticStringsKey.TOUKA_SDK_BANNERID);
#endif
            }
        }
        /// 
        /// 展示native
        /// 
        ///  native x坐标 
        ///  native y坐标 
        ///  native width 
        ///  native height 
        public void ShowNative(float x, float y, float width, float height,string adpos)
        {
#if UNITY_IOS && !NO_SDK
            TGiOSAdManager.Instance.ShowNative(x, y, width, height, StaticStringsKey.TOUKA_SDK_NATIVEID,adpos);
#elif UNITY_ANDROID
        TGAndroidAdManager.Instance.ShowNative(x, y, width, height, StaticStringsKey.TOUKA_SDK_NATIVEID);
#endif
        }
        #endregion
        #region 广告加载 Load 接口
        /// 
        /// 加载插屏
        /// 
        /// 
        public void LoadInterstitial(System.Action _callback)
        {
            m_intersitialLoadCallback = _callback;
#if UNITY_IOS && !NO_SDK
            TGiOSAdManager.Instance.Loadinterstitial(StaticStringsKey.TOUKA_SDK_INTERID);
#elif UNITY_ANDROID
        TGAndroidAdManager.Instance.Loadinterstitial(StaticStringsKey.TOUKA_SDK_INTERID);
#endif
        }
        /// 
        /// 加载激励视频
        /// 
        /// 
        public void LoadVideo(System.Action _callback)
        {
            m_videoLoadCallback = _callback;
#if UNITY_IOS && !NO_SDK
            TGiOSAdManager.Instance.LoadVideo(StaticStringsKey.TOUKA_SDK_REWARDID);
#elif UNITY_ANDROID
        TGAndroidAdManager.Instance.LoadVideo(StaticStringsKey.TOUKA_SDK_REWARDID);
#endif
        }
        /// 
        /// 加载banner
        /// 
        /// 
        public void LoadBanner(System.Action _callback)
        {
            m_bannerLoadCallback = _callback;
#if UNITY_IOS
#if NORMAL_BANNER
            TGiOSAdManager.Instance.LoadBannerWithUnitId(StaticStringsKey.TOUKA_SDK_BANNERID);
#elif NATIVE_BANNER
            TGiOSAdManager.Instance.LoadNativeBannerWithUnitId(StaticStringsKey.TOUKA_SDK_BANNERID);
#endif
#elif UNITY_ANDROID
        TGAndroidAdManager.Instance.LoadBannerWithUnitId(StaticStringsKey.TOUKA_SDK_BANNERID);
#endif
        }
        /// 
        /// 加载native
        /// 
        /// 
        public void LoadNative(System.Action _callback)
        {
            Debug.Log("[ToukaSDKAdapter]  LoadNative -------");
            m_nativeLoadCallback = _callback;
#if UNITY_IOS && !NO_SDK
            // if (!ToukaUtils.FloatEqual(ToukaAdManager.Instance.NativeWidth, 0) && !ToukaUtils.FloatEqual(ToukaAdManager.Instance.NativeHeight, 0))
            // {
            Debug.Log("native width, native height != 0, nativeWidth : " + ToukaAdManager.Instance.NativeWidth + " , nativeHeight : " + ToukaAdManager.Instance.NativeHeight);
            TGiOSAdManager.Instance.LoadNative(StaticStringsKey.TOUKA_SDK_NATIVEID, ToukaAdManager.Instance.NativeWidth, ToukaAdManager.Instance.NativeHeight);     // 不需要了,传0就可以
                                                                                                                                                                    // }
#elif UNITY_ANDROID
#endif
        }
        #endregion
        #region 广告移除 Remove /隐藏 Hide 接口
        /// 
        /// 移除banner
        /// 
        ///  true:清除 flse:隐藏
        public void RemoveBanner(bool _clean)
        {
            Debug.Log("in ToukaSDKAdapter, RemoveBanner , _clean : " + _clean);
#if UNITY_IOS
            if (_clean)
            {
                Debug.Log("in ToukaSDKAdapter, RemoveBanner ,removeBanner. 01");
#if NORMAL_BANNER
                TGiOSAdManager.Instance.RemoveBanner ();
#elif NATIVE_BANNER
                TGiOSAdManager.Instance.RemoveNativeBanner();
#endif
            }
            else
            {
                Debug.Log("in ToukaSDKAdapter, RemoveBanner ,removeBanner. 02");
#if NORMAL_BANNER
                TGiOSAdManager.Instance.HideBanner ();
#elif NATIVE_BANNER
                TGiOSAdManager.Instance.HideNativeBanner();
#endif
            }
            m_bannerHasShowed = false;
#elif UNITY_ANDROID
        TGAndroidAdManager.Instance.HideBanner();
#endif
        }
        /// 
        /// 移除native
        /// 
        ///  true:清除 false:隐藏 
        public void RemoveNative(bool _isClean)
        {
#if UNITY_IOS && !NO_SDK
            TGiOSAdManager.Instance.RemoveNative();
#elif UNITY_ANDROID
        
#endif
        }
        #endregion
        #region 广告回调
        #region TKInitListener
        public void initSuccess()
        {
            Debug.Log("[ToukaSDKAdapter]: sdk init succ");
        }
        public void initFail()
        {
            Debug.Log("[ToukaSDKAdapter]: sdk init Fail.");
        }
        #endregion
        #region InterstitialAdListener
        public void onInterstitialAdClick() { }
        public void onInterstitialAdClose()
        {
            Debug.Log("[ToukaSDKAdapter]: Interstitial ad close.");
            if (m_intersitialShowCallback != null) m_intersitialShowCallback(ToukaIntersitialStatus.CLOSE);
        }
        public void onInterstitialAdEndPlayingVideo() { }
        public void onInterstitialAdFailedToPlayVideo() { }
        public void onInterstitialAdLoad()
        {
            m_intersitialLoadCallback(true);
        }
        public void onInterstitialAdLoadFail()
        {
            m_intersitialLoadCallback(false);
        }
        public void onInterstitialAdShow()
        {
            Debug.Log("[ToukaSDKAdapter]: Interstitial ad show.");
            if (m_intersitialShowCallback != null) m_intersitialShowCallback(ToukaIntersitialStatus.SHOW);
        }
        public void onInterstitialAdStartPlayingVideo() { }
        public void onInterstitialAdFailedToShow()
        {
            if (m_intersitialShowCallback != null) m_intersitialShowCallback(ToukaIntersitialStatus.FAIL);
        }
        #endregion
        #region RewardedVideoListener
        public void onRewardedVideoAdLoaded()
        {
            if (m_videoLoadCallback != null)
            {
                m_videoLoadCallback(true);
            }
        }
        public void onRewardedVideoAdLoadFail()
        {
            if (m_videoLoadCallback != null)
            {
                m_videoLoadCallback(false);
            }
        }
        public void onRewardedVideoAdPlayStart()
        {
            if (m_videoShowCallback != null) m_videoShowCallback(ToukaVideoStatus.SHOW);
        }
        public void onRewardedVideoAdPlayEnd() { }
        public void onRewardedVideoAdPlayFail()
        {
            if (m_videoShowCallback != null) m_videoShowCallback(ToukaVideoStatus.FAIL);
        }
        public void onRewardedVideoAdPlayClosed(string _isReward)
        {
            Debug.Log("[ToukaSDKAdapter]: reward ad close, isReward : " + _isReward);
            bool isReward = _isReward == "True";
            if (m_videoShowCallback != null) m_videoShowCallback(ToukaVideoStatus.CLOSE);
            if (m_videoShowCallback != null) m_videoShowCallback(isReward ? ToukaVideoStatus.SUCCESS : ToukaVideoStatus.CANCEL);
        }
        public void onRewardedVideoAdPlayClicked() { }
        #endregion
        #region BannerAdListener
        public void onAdAutoRefresh() { }
        public void onAdAutoRefreshFail() { }
        public void onAdClick() { }
        public void onAdClose() { }
        public void onAdImpress() { }
        public void onBannerAdLoad()
        {
            m_bannerLoadCallback(true);
            m_bannerLoaded = true;
        }
        public void onBannerAdLoadFail()
        {
            m_bannerLoadCallback(false);
        }
        #endregion
        #region NativeBannerAdListener
        public void onNativeBannerAdLoaded()
        {
            m_bannerLoadCallback(true);
            m_bannerLoaded = true;
        }
        public void onNativeBannerAdLoadFail()
        {
            Debug.Log("[ToukaSDKAdapter] onNativeBannerAdLoadFail.");
            m_bannerLoadCallback(false);
        }
        public void onNativeBannerAdImpressed() { }
        public void onNativeBannerAdClicked() { }
        public void onNativeBannerAdAutoRefresh() { }
        public void onNativeBannerAdAutoRefreshFailure() { }
        public void onNativeBannerAdCloseButtonClicked() { }
        public void onNativeAdLoaded()
        {
            Debug.Log("[ToukaSDKAdapter] onNativeAdLoaded ----");
            if (m_nativeLoadCallback != null)
            {
                m_nativeLoadCallback(true);
            }
        }
        public void onNativeAdLoadFail()
        {
            Debug.Log("[ToukaSDKAdapter] onNativeAdLoadFail ----");
            if (m_nativeLoadCallback != null)
            {
                m_nativeLoadCallback(false);
            }
        }
        #endregion
        #endregion
    }
}