using System;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.Scripting;

namespace TyphoonUnitySDK
{
    [Preserve]
    public class MiniGameAdsControl : MonoBehaviour
    {
        // 声明导入外部方法
        [DllImport("__Internal")]
        private static extern void showInterstitial();

        [DllImport("__Internal")]
        private static extern void showRewardedVideo();

        [DllImport("__Internal")]
        private static extern void showBanner();

        [DllImport("__Internal")]
        private static extern void hideBanner();

        private Action OnVideoSuccess { get; set; }
        private Action<string> OnVideoFail { get; set; }

        public void ShowVideo(Action success, Action<string> fail)
        {
            OnVideoSuccess = success;
            OnVideoFail = fail;
            SdkLite.MiniGameLifecycle?.OnVideoBeforePlay();
            ShowRewardedVideoAd();
        }

        // 激励广告回调，处理发放奖励
        public void showReWardedCallback(int isSuccess)
        {
            SdkLite.MiniGameLifecycle?.OnVideoComplete(isSuccess == 1);
            SdkDebug.Log($"show reward: success code = {isSuccess} ");
            var success = OnVideoSuccess;
            var fail = OnVideoFail;
            OnVideoFail = null;
            OnVideoSuccess = null;
            if (isSuccess == 1)
            {
                success?.Invoke();
            }
            else
            {
                fail?.Invoke($"video call back code : {isSuccess}");
            }
        }

        // 插屏广告回调，由于不用发放奖励可不用处理 
        public void showInterstitialCallback(int isSuccess)
        {
            SdkLite.MiniGameLifecycle?.OnIntersComplete(isSuccess == 1);
            Debug.Log("show Interstitial: " + (isSuccess == 1 ? "success" : "failed"));
        }

        // banner广告播放回调，由于不用发放奖励可不用处理
        public void showBannerCallback(int isSuccess)
        {
            Debug.Log("show banner: " + (isSuccess == 1 ? "success" : "failed"));
        }

        // banner广告隐藏回调，由于不用发放奖励可不用处理
        public void hideBannerCallback(int isSuccess)
        {
            Debug.Log("hide banner: " + (isSuccess == 1 ? "success" : "failed"));
        }

        // 播放插屏，调用JS.jslib文件中声明的 showInterstitial
        public void showInterstitialAd()
        {
            SdkLite.MiniGameLifecycle?.OnIntersBeforePlay();
            showInterstitial();
        }

        // 播放插屏，调用JS.jslib文件中声明的 showRewardedVideo
        public void ShowRewardedVideoAd()
        {
            showRewardedVideo();
        }

        // 播放插屏，调用JS.jslib文件中声明的 showBanner
        public void showBannerAd()
        {
            showBanner();
        }

        // 播放插屏，调用JS.jslib文件中声明的 hideBanner
        public void hideBannerAd()
        {
            hideBanner();
        }


        private void OnApplicationFocus(bool hasFocus)
        {
            SdkLite.MiniGameLifecycle?.OnFocus(hasFocus);
        }
    }
}