using System;
using System.Collections.Generic;
using UnityEngine;
namespace Touka
{
    public interface ITKGSDK
    {
        /// 
        /// init sdk
        /// 
        void InitSDK(Action _initCallback = null);
        /// 
        /// Set game focus
        /// 
        /// 
        void SetGameFocusListener(Action _gameFocusAction);
        /// 
        /// Set reward click  listener
        /// 
        void SetRewardClickListener(Action _rewardClickAction);
        /// 
        /// Get channel
        /// 
        /// 
        AppChannel GetChannel();
        #region Ads
        // remove all ads
        void PurchasedRemoveAds();
        /// 
        /// Remove Native Ad
        /// 
        void RemoveNativeAd();
        /// 
        /// Is Ready Native Ad
        /// 
        /// 
        bool IsReadyNativeAd();
        /// 
        /// Show Native Ad
        /// 
        /// position
        void ShowNativeAd(RectTransform pRect, Camera pCam = null, string pAdPos = "");
        /// 
        /// Show banner
        /// 
        /// 1:top,2:bottom
        void ShowBanner(TKGBannerAlign _bannerAlign);
        /// 
        /// Hide banner
        /// 
        void HideBanner();
        /// 
        /// Show Interstitial Ad
        /// 
        ///  Name of interstitial ad placement. 
        ///  Callback of interstitial ad close and show interstitial failed
        ///  IVADType for distinguish interstitial ads frequency, default use iv1
        void ShowInterstitialAd(TKGIVAdPositionName _adPos, Action _callback = null, IVADType _IvType = IVADType.IV1);
        /// 
        /// Show Reward Ad
        /// 
        ///  Name of reward ad placement
        ///  true:reward succ, false: reward failed
        /// Callback of reward ad show fail
        void ShowRewardAd(TKGRVPositionName _adPos, Action _rewardCallback = null, Action _showFailedCallback = null);
        /// 
        /// Is Ready Reward
        /// 
        /// 
        bool IsReadyRewardAd();
        /// 
        /// Is Ready Interstitial
        /// 
        /// 
        bool IsReadyInterstitialAd();
        #endregion
        #region Log Event
        #region Normal 
        /// 
        /// log event
        /// 
        /// 
        void LogEvent(string _eventSort);
        /// 
        /// log event
        /// 
        /// 
        /// 
        /// 
        void LogEvent(string _eventSort, string _key, string _value);
        /// 
        /// log event
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        void LogEvent(string _eventSort, string _key01, string _value01, string _key02, string _value02);
        /// 
        /// log event
        /// 
        /// 
        /// 
        void LogEvent(string _eventSort, Dictionary _eventDic = null);
        #endregion
        #region Level Event
        /// 
        /// Notify game start
        /// 
        /// 
        void LevelStart(int _level);
        /// 
        /// Notify game start
        /// 
        /// 
        void LevelStart(string _level);
        /// 
        /// Notify game end
        /// 
        /// 
        /// 
        bool LevelEnd(int _level, StageResult _stageResult);
        /// 
        /// Notify game end
        /// 
        /// 
        /// 
        bool LevelEnd(string _level, StageResult _stageResult);
        #endregion
        #region Reward Ad Button Show
        /// 
        /// Log Reward ad button show
        /// 
        /// 
        void LogRewardAdBtnShow(string _pos);
        #endregion
        #region Tracking Event
        ///// 
        ///// Log Tracking Event
        ///// 
        ///// 
        //void LogTrackingEvent(TrackingEventType _eventType);
        #endregion
        #endregion
        #region Online Config
        /// 
        /// get config - string
        /// 
        /// 
        /// 
        string GetConfigStr(string _key);
        /// 
        /// get config - int
        /// 
        /// 
        /// 
        int GetConfigInt(string _key);
        /// 
        /// get config - bool
        /// 
        /// 
        /// 
        bool GetConfigBool(string _key);
        #endregion
        #region Others(common)
        /// 
        /// review
        /// 
        void Review();
        /// 
        /// open privacy url
        /// 
        void OpenPrivacyURL();
        /// 
        /// open user term url
        /// 
        void OpenUserTermURL();
        /// 
        /// open more game
        /// 
        void OpenMoreGame();
        /// 
        /// open browser url
        /// 
        /// 
        void OpenUrlByBrowser(string _url);
        void OpenPolicyPop();
        /// 
        /// shake
        /// 
        /// 0 light,1 medium,2 heavy
        /// ios 0~1, android any num
        void Shake(int _shakeType, float _intensity = 1);
        #endregion
        #region Others (unCommon)
        /// 
        /// Set game focus
        /// 
        /// 
        void SetUserSourceListener(Action _userSourceAction);
        /// 
        /// common callback
        /// 
        /// 
        void SetTKGCommonCallback(Action _commonCallback);
        /// 
        /// set log enable
        /// 
        /// 
        void SetLogEnable(bool _enable);
        /// 
        /// share txt
        /// 
        /// 
        void ShareTxt(string _shareTxt);
        /// 
        /// regist APNS
        /// 
        void RegistAPNS();
        /// 
        /// shake
        /// 
        /// notification identifier
        /// The body of the notification.
        /// notify after the time interval. format: yyyy-MM-dd HH:mm:ss 
        /// The application badge number.
        /// The title of the notification.
        /// The subtitle of the notification.
        void RegistNotification(string notiId, string body, string fireDate, int badge, string title, string subTitle);
        /// 
        /// remove all notification
        /// 
        void RemoveAllNotifications();
        /// 
        /// remove notification by notification identifier
        /// 
        /// notification identifier
        void RemoveNotification(string notiId);
        #endregion
    }
    /// 
    /// IV Ad Type
    /// Control different frequency interstitial Ads
    /// 
    public enum IVADType
    {
        IV1 = 0,
        IV2,
        IV3,
        IV4,
        IV5,
        IV6,
        IV7,
        iv8,
        MAX,
    }
    /// 
    /// Tracking Event Type
    /// 
    public enum TrackingEventType
    {
        GuildStart = 0,     // guide start show
        GuildEnd = 1,       // guild end
        FirstOperateGame = 2, // user operates the game for the first time
        Max,
    }
    /// 
    /// ad show failed code type
    /// 
    public enum AdShowFailCodeType
    {
        AdShowFailReal = 57,     // ad real show failed
        AdIsNotReady = 58,   // The ad component is displayed and found not ready
        AdIsReadyCannotShow = 59,   // When the ad component is displayed, the ad is ready, but the rule that cannot display the ad is triggered
    }
    /// 
    /// banner align
    /// 
    public enum TKGBannerAlign : int
    {
        BannerCenterBottomAlign = 34,
        BannerCenterTopAlign = 10,
    }
    /// 
    /// tkg common callback code
    /// 
    public enum CommonCallbackCode
    {
        FirebaseOnlineParamGet_Succ = 990001,
        FirebaseOnlineParamGet_Failed = 990002,
    }
    /// 
    /// stage result
    /// 
    public enum StageResult
    {
        StageSucc = 0,
        StageFail = 1,
        StageRetry = 2,
        StageBack = 3,
    }
    /// 
    /// app channel
    /// 
    public enum AppChannel
    {
        None,
        AppStore_GB,
        AppStore_CN,
        GooglePlay,
        DY012,
        GW002,
        HY003,
        OP004,
        VO005,
        XM006,
        HW007,
        TX008,
        TP009,
        MM010,
        ZX011,
        KS012,
        PJ000,
        AndroidRoot = 10000
    }
}