namespace Guru
{
    using System;
    using UnityEngine;
    
    
    public partial class GuruSDK
    {
        /// 
        /// 回调参数类
        /// 
        public class Callbacks
        {
            /// 
            /// APP 事件
            /// 
            public static class App
            {
                internal static Action _onAppPaused;
                public static event Action OnAppPaused
                {
                    add => _onAppPaused += value;
                    remove => _onAppPaused -= value;
                }
                
                internal static Action _onAppQuit;
                public static event Action OnAppQuit
                {
                    add => _onAppQuit += value;
                    remove => _onAppQuit -= value;
                }
            }
            /// 
            /// GDPR Consent
            /// 
            public static class ConsentFlow
            {
                /// 
                /// 当Consent启动结束后返回状态码
                /// 
                public static event Action OnConsentResult
                {
                    add => _onConsentResult += value;
                    remove => _onConsentResult -= value;
                }
                internal static Action _onConsentResult;
                /// 
                /// ATT 状态返回
                /// 
                public static event Action OnAttResult
                {
                    add => _onAttResult += value;
                    remove => _onAttResult -= value;
                }
                internal static Action _onAttResult;
            }
            /// 
            /// 广告回调
            /// 
            public static class Ads
            {
                internal static Action _onAdsInitComplete;
                public static event Action OnAdsInitComplete
                {
                    add => _onAdsInitComplete += value;
                    remove => _onAdsInitComplete -= value;
                }
                
                internal static Action _onBannerADLoaded;
                public static event Action OnBannerADLoaded
                {
                    add => _onBannerADLoaded += value;
                    remove => _onBannerADLoaded -= value;
                }
                
                internal static Action _onInterstitialADLoaded;
                public static event Action OnInterstitialADLoaded
                {
                    add => _onInterstitialADLoaded += value;
                    remove => _onInterstitialADLoaded -= value;
                }
                internal static Action _onInterstitialADFailed;
                public static event Action OnInterstitialADFailed
                {
                    add => _onInterstitialADFailed += value;
                    remove => _onInterstitialADFailed -= value;
                }
                internal static Action _onRewardedADLoaded;
                public static event Action OnRewardedADLoaded
                {
                    add => _onRewardedADLoaded += value;
                    remove => _onRewardedADLoaded -= value;
                }
                internal static Action _onRewardADFailed;
                public static event Action OnRewardADFailed
                {
                    add => _onRewardADFailed += value;
                    remove => _onRewardADFailed -= value;
                }
            }
            /// 
            /// 云控参数
            /// 
            public static class Remote
            {
                internal static Action _onRemoteFetchComplete;
                public static event Action OnRemoteFetchComplete
                {
                    add => _onRemoteFetchComplete += value;
                    remove => _onRemoteFetchComplete -= value;
                }
            }
            /// 
            /// 支付回调
            /// 
            public static class IAP
            {
                internal static Action _onIAPInitComplete;
                public static event Action OnIAPInitComplete
                {
                    add => _onIAPInitComplete += value;
                    remove => _onIAPInitComplete -= value;
                }
                
                internal static Action _onPurchaseStart;
                public static event Action OnPurchaseStart
                {
                    add => _onPurchaseStart += value;
                    remove => _onPurchaseStart -= value;
                }
                
                internal static Action _onPurchaseFailed;
                public static event Action OnPurchaseFailed
                {
                    add => _onPurchaseFailed += value;
                    remove => _onPurchaseFailed -= value;
                }
                
                internal static Action _onIAPRestored;
                public static event Action OnIAPRestored
                {
                    add => _onIAPRestored += value;
                    remove => _onIAPRestored -= value;
                }
                
            }
        }
    }
}