using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Touka;
public class TKGUtils
{
    /// 
    /// 是否首次触达某个事件
    /// 
    /// 
    /// 
    public static bool IfFirstCheckPlayerPrefs(string _key)
    {
        var isFirstClick = GetPlayerPrefsIntByKey(_key) == 0;
        SavePlayerPrefsIntByKeyValue(_key, 1);
        return isFirstClick;
    }
    /// 
    /// 本地存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 OpenBrowserUrl(string _url)
    {
        Application.OpenURL(_url);
    }
    #region unity sdk only
    public static void InitTenjinFirst()
    {
        ToukaUtils.InitTenjinFirst();
    }
    public static void ActiveAutoIV(bool pActive)
    {
        AutoIntersititialManager.Instance.ActiveLogic(pActive);
    }
    public static bool WillPlayInterstitial(bool pNormalIV = true)
    {
        return ToukaInterstitialTimer.Instance.CanShow(pNormalIV ? ToukaSDKManager.IVType.IV1 : ToukaSDKManager.IVType.IV2, true) && ToukaAdManager.Instance.IsReadyIntersitial();
    }
    public static bool IsNativeReady()
    {
        return ToukaAdManager.Instance.IsReadyNative;
    }
    public static void ShowNative(Vector3 pTL, Vector3 pBR, string pAdPos, Camera pCam = null)
    {
        Vector2 tTopLeft = RectTransformUtility.WorldToScreenPoint(pCam, pTL);
        Vector2 tBottomRight = RectTransformUtility.WorldToScreenPoint(pCam, pBR);
        float tWidth = Mathf.Abs(tBottomRight.x - tTopLeft.x);
        float tHeight = Mathf.Abs(tBottomRight.y - tTopLeft.y);
        Debug.Log("TKG Native top left :" + tTopLeft);
        Debug.Log("TKG Native bottom right :" + tBottomRight);
        //Debug.Log("TKG Native width :" + Mathf.Abs(pBottomRight.x - pTopLeft.x));
        //Debug.Log("TKG Native height :" + Mathf.Abs(pBottomRight.y - pTopLeft.y));
        //Debug.Log("TKG Native screen width :" + Screen.width);
        //Debug.Log("TKG Native screen height :" + Screen.height);
        if (ToukaAdManager.Instance.IsReadyNative)
        {
            ToukaAdManager.Instance.ShowNative(tTopLeft.x, Screen.height - tTopLeft.y, tWidth, tHeight, pAdPos);
        }
    }
    public static void RemoveNative()
    {
        ToukaAdManager.Instance.HideNative(false);
    }
    #endregion
}