using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using SimpleJson;
using CommonLang;

namespace Pomelo.DotNetClient
{
    public static class EventTypes
    {
        private static HashMap<string, Type> pushTypeMap = new HashMap<string, Type>();
        private static HashMap<Type, string> pushKeyMap = new HashMap<Type, string>();
        private static HashMap<Type, string> requestTypeMap = new HashMap<Type, string>();
        private static HashMap<Type, string> responseTypeMap = new HashMap<Type, string>();
        private static HashMap<string, Type> responseKeyMap = new HashMap<string, Type>();
        private static HashMap<Type, string> notifyTypeMap = new HashMap<Type, string>();

        public static void RegistPushType(string key, Type value)
        {
            pushTypeMap.Add(key, value);
            pushKeyMap.Add(value, key);
        }
        public static void RegistRequestType(string key, Type request, Type response)
        {
            requestTypeMap.Add(request, key);
            responseTypeMap.Add(response, key);
            responseKeyMap.Add(key, response);
        }
        public static void RegistNotifyType(string key, Type notify)
        {
            notifyTypeMap.Add(notify, key);
        }

        public static Type GetPushType(string key)
        {
            return pushTypeMap.Get(key);
        }
        public static string GetPushKey(Type type)
        {
            return pushKeyMap.Get(type);
        }

        public static string GetRequestKey(Type type)
        {
            return requestTypeMap.Get(type);
        }
        public static string GetResponseKey(Type type)
        {
            return responseTypeMap.Get(type);
        }
        public static Type GetResponseType(string key)
        {
            return responseKeyMap.Get(key);
        }
        public static string GetNotifyKey(Type type)
        {
            return notifyTypeMap.Get(type);
        }

        public static IEnumerable<Type> PushTypes { get { return pushTypeMap.Values; } }
        public static IEnumerable<Type> RequestTypes { get { return requestTypeMap.Keys; } }
        public static IEnumerable<Type> ResponseTypes { get { return responseTypeMap.Keys; } }
        public static IEnumerable<Type> NotifyTypes { get { return notifyTypeMap.Keys; } }

    }

}