using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;
namespace Touka
{
    /// 
    /// SDK 可供外部调用的一些工具方法
    /// 
    public static class ToukaUtils
    {
        /// 
        /// 跳转隐私链接
        /// 
        public static void OpenPrivacyURL()
        {
            Application.OpenURL(TKGBasicConfig.PrivacyURL);
        }
        public static void OpenUserPolicy()
        {
            Application.OpenURL(TKGBasicConfig.AgreementURL);
        }
        public static void OpenBrowserUrl(string _url)
        {
            Application.OpenURL(_url);
        }
        /// 
        /// 打开更多游戏 - 跳转appstore公司账号页面
        /// 
        /// 
        public static void OpenMoreGames()
        {
#if UNITY_IOS
            Application.OpenURL(TKGBasicConfig.MoreGameURL);
#endif
        }
        /// 
        /// 打开URL
        /// 
        /// 
        public static void OpenUrl(string _url)
        {
            Application.OpenURL(_url);
        }
        /// 
        /// 一键加入QQ群
        /// 
        public static void JoinQQGroup()
        {
            string qqUrl = "mqqapi://card/show_pslcard?src_type=internal&version=1&uin=916827975&key=ed38055c01233796a17ff0a800c9967cdf1c2b82dfc98d287130dfe1324b411d&card_type=group&source=external&jump_from=webapi";
            Application.OpenURL(qqUrl);
        }
        /// 
        /// 打开评价链接 - 跳转游戏商店页
        /// 
        public static void OpenReviewURL()
        {
#if UNITY_ANDROID
        Debug.Log("Review url = " + StaticStringsKey.REVIEW_URL + Application.identifier);
        Application.OpenURL(StaticStringsKey.REVIEW_URL+Application.identifier);
        return;
#endif
            Application.OpenURL(StaticStringsKey.REVIEW_URL);
        }
        /// 
        /// iOS游戏内弹出系统评价窗口
        /// 
        public static void OpenSystemReviewPop()
        {
            Debug.Log("游戏内跳出评价");
#if UNITY_IOS
            TGTools.Instance.ShowReview();
#endif
        }
        /// 
        /// 需要延迟初始化tenjin时调用
        /// 
        public static void InitTenjinFirst()
        {
            if (GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.HasInitTenjinFirst, 0) == 0)
            {
                ToukaAnalyticsManager.Instance.InitTenjinInner();
                SavePlayerPrefsIntByKeyValue(StaticStringsPlayerPrefs.HasInitTenjinFirst, 1);
            }
        }
        /// 
        /// 是否首次触达某个事件
        /// 
        /// 
        /// 
        public static bool IfFirstCheckPlayerPrefs(string _key)
        {
            var isFirstClick = GetPlayerPrefsIntByKey(_key) == 0;
            SavePlayerPrefsIntByKeyValue(_key, 1);
            return isFirstClick;
        }
        /// 
        /// 只首次触发某个事件进行打点
        /// 
        /// 
        /// 
        /// 
        public static void LogFirstEvent(ToukaLogType _logType, string _eventKey)
        {
            var isFirstClick = IfFirstCheckPlayerPrefs(_eventKey);
            if (isFirstClick)
            {
                ToukaAnalyticsManager.Instance.LogEvent(_logType, _eventKey);
            }
        }
        /// 
        /// 是否是中文
        /// 
        public static bool IsCN
        {
            get
            {
                var language = Application.systemLanguage.ToString().ToLower();
                if (language.Contains("chinese"))
                {
                    return true;
                }
                return false;
            }
        }
        /// 
        /// 本地存int
        ///
        /// key 内部拼接了前缀:Touka_
        /// 
        /// 
        /// 
        /// 
        public static int GetPlayerPrefsIntByKey(string _key, int _defaultValue = 0)
        {
            int value = PlayerPrefs.GetInt(string.Format("{0}{1}", StaticStringsPlayerPrefs.TOUKA_PREFIX, _key), _defaultValue);
            return value;
        }
        /// 
        /// 本地取int
        ///
        /// key 内部拼接了前缀:Touka_
        /// 
        /// 
        /// 
        public static void SavePlayerPrefsIntByKeyValue(string _key, int _newValue)
        {
            PlayerPrefs.SetInt(string.Format("{0}{1}", StaticStringsPlayerPrefs.TOUKA_PREFIX, _key), _newValue);
            PlayerPrefs.Save();
        }
        /// 
        /// 本地存string
        ///
        /// key 内部拼接了前缀:Touka_
        /// 
        /// 
        /// 
        /// 
        public static string GetPlayerPrefsStringByKey(string _key, string _defaultValue = "")
        {
            string value = PlayerPrefs.GetString(string.Format("{0}{1}", StaticStringsPlayerPrefs.TOUKA_PREFIX, _key), _defaultValue);
            return value;
        }
        /// 
        /// 本地取string
        ///
        /// key 内部拼接了前缀:Touka_
        /// 
        /// 
        /// 
        public static void SavePlayerPrefsStringByKeyValue(string _key, string _newValue)
        {
            PlayerPrefs.SetString(string.Format("{0}{1}", StaticStringsPlayerPrefs.TOUKA_PREFIX, _key), _newValue);
            PlayerPrefs.Save();
        }
        /// 
        /// 缓存当前时间
        /// 
        /// 
        public static void SaveCurrTime2PlayerPrefs(string _key)
        {
            DateTime date1 = DateTime.Now;
            string s1 = date1.ToString();
            SavePlayerPrefsStringByKeyValue(_key, s1);
        }
        /// 
        /// 缓存本地时间为string
        /// 
        /// 
        /// 
        public static void SaveCurrTime2PlayerPrefsWithStringDate(string _key, string _dateStr)
        {
            SavePlayerPrefsStringByKeyValue(_key, _dateStr);
        }
        /// 
        /// 取出缓存string时间为 DateTime
        /// 
        /// 
        /// 
        public static DateTime GetDateTimeFromPlayerPrefs(string _key)
        {
            string firstDateValue = GetPlayerPrefsStringByKey(_key);
            if (string.IsNullOrEmpty(firstDateValue))
            {
                return new DateTime(1990, 1, 1, 0, 0, 0);
            }
            DateTime dateOld = Convert.ToDateTime(firstDateValue);
            return dateOld;
        }
        /// 
        /// 判断是否为新用户
        ///
        /// 距离首次登录时间间隔24h以内为新用户
        /// 
        /// 
        public static bool isNewUser()
        {
            DateTime dateCurr = DateTime.Now;
            string firstDateValue = GetPlayerPrefsStringByKey(StaticStringsPlayerPrefs.FirstLoginTime);
            if (string.IsNullOrEmpty(firstDateValue))
            {
                Debug.Log("存的值为空,为新用户");
                return true;
            }
            Debug.Log("读取出来的值: " + firstDateValue + " , 现在的时间值:" + dateCurr.ToString());     // 06/16/2019 19:46:57
            DateTime dateOld = Convert.ToDateTime(firstDateValue);
            TimeSpan timeSpan = dateCurr - dateOld;
            Debug.Log("timeSpan.Seconds : " + timeSpan.TotalMinutes);
            if (timeSpan.TotalMinutes >= 24 * 60)
            {
                Debug.Log("不是新用户了");
                return false;
            }
            Debug.Log("是新用户");
            return true;
        }
        /// 
        /// equal double
        /// 
        /// 
        /// 
        /// 
        public static bool equalDouble(double a, double b)
        {
            if ((a - b > -0.000001) && (a - b) < 0.000001)
                return true;
            else
                return false;
        }
        /// 
        /// Floats the equal.
        /// 
        /// true, if equal was floated, false otherwise.
        /// The alpha component.
        /// The blue component.
        public static bool FloatEqual(float a, float b)
        {
            if ((a - b > -0.000001) && (a - b) < 0.000001)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        public static string GetTodayDataStr()
        {
            string timeStr = DateTime.Now.ToString("yyyy-MM-dd");
            return timeStr;
        }
        public static void CheckPassLvAndAdEvent(int pLvNum, bool pWithAdCheck = false)
        {
            //Debug.Log("is first day ==: " + ToukaUtilsInner.Instance.isFirstDayLogin);
            //Debug.Log("pass lv count ==: " + pLvNum);
            if (ToukaUtilsInner.Instance.isFirstDayLogin && pLvNum >= TKGSDKManager.Instance.GetConfigInt(ToukaInnerParamKey.NewUserPassXLevel.ToString()))
            {
                string tPassLvKey = "PassLv_Log";
                if (IfFirstCheckPlayerPrefs(tPassLvKey))
                {
                    ToukaAnalyticsManager.Instance.LogEvent(ToukaLogType.Tenjin, StaticStringsEvent.Event_Tenjin_TKInner_NewUserPassLevelX);
                    ToukaAnalyticsManager.Instance.LogEventByUmeng(StaticStringsEvent.Event_Tenjin_TKInner_NewUserPassLevelX);
#if USE_FIREBASE
                    FirebaseTool.Instance.LogEvent(StaticStringsEvent.Event_Tenjin_TKInner_NewUserPassLevelX);
#endif
                }
                if (pWithAdCheck)
                {
                    CheckAdCount();
                }
            }
#if UNITY_IOS
            TGiOSAdManager.Instance.NewUserPassLevel();
#endif
        }
        private static void CheckAdCount()
        {
            var videoCount = GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.VideoShowCount);
            var intersitialCount = GetPlayerPrefsIntByKey(StaticStringsPlayerPrefs.IntersitialShowCount);
            string tLvAndAdKey = "PassLv&AdCount_Log";
            string tEvtPassLvAndAdCount = "Passlevel&Count_Video";
            //Debug.Log("watch ad count ==: " + (videoCount + intersitialCount));
            if ((videoCount + intersitialCount) >= TKGSDKManager.Instance.GetConfigInt(ToukaInnerParamKey.NewUserPvCount.ToString()))
            {
                if (IfFirstCheckPlayerPrefs(tLvAndAdKey))
                {
                    ToukaAnalyticsManager.Instance.LogEvent(ToukaLogType.Tenjin, tEvtPassLvAndAdCount);
                    ToukaAnalyticsManager.Instance.LogEventByUmeng(tEvtPassLvAndAdCount);
#if USE_FIREBASE
                    FirebaseTool.Instance.LogEvent(tEvtPassLvAndAdCount);
#endif
                }
            }
        }
    }
}