using System;
using System.Collections;
using UnityEngine;
namespace WeChatWASM
{
    /// 
    /// 长时间才返回的用这个
    /// 
    class WXLongCallBackHandler
    {
        //用于暂存回调
        private static readonly Hashtable responseHT = new Hashtable();
        //用于作为回调id的一部分
        private static int htCounter = 0;
        private static int GenarateCallbackId()
        {
            if (htCounter > 10000000)
            {
                htCounter = 0;
            }
            htCounter++;
            return htCounter;
        }
        public static string Add(Action callback) where T : WXBaseResponse
        {
            if(callback == null)
            {
                return "";
            }
            int id = GenarateCallbackId();
            TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            var timestamp = Convert.ToInt64(ts.TotalSeconds);
            var key = timestamp.ToString() + '-' + id;
            responseHT.Add(key,callback);
            return key;
        }
        public static void InvokeResponseCallback(string str) where T : WXBaseResponse
        {
            if (str != null)
            {
                T res = JsonUtility.FromJson(str);
                var id = res.callbackId;
                if (responseHT[id] != null)
                {
                    var callback = (Action)responseHT[id];
                    callback(res);
                    responseHT.Remove(id);
                }
            }
        }
    }
    
}