using System.Collections.Generic;
using System.Reflection;
using Utility;

namespace Fort23.Core
{
    // public class TypeData
    // {
    //     public Entity Entity
    //     {
    //         get { return _entity; }
    //     }
    //
    //     public List<CustomMethod> AllCustomMethod
    //     {
    //         get { return _allCustomMethod; }
    //     }
    //
    //     private List<CustomMethod> _allCustomMethod;
    //     private Entity _entity;
    //     private Map<CustomMethodType, List<MethodInfo>> _update = new Map<CustomMethodType, List<MethodInfo>>();
    //
    //     public TypeData(Entity entity)
    //     {
    //         _entity = entity;
    //         var methodInfos = _entity.GetType().GetMethods();
    //         _allCustomMethod = new List<CustomMethod>();
    //         for (int i = 0; i < methodInfos.Length; i++)
    //         {
    //             CustomMethod customMethod=  methodInfos[i].GetCustomAttribute<CustomMethod>();
    //             if (customMethod != null)
    //             {
    //                 _allCustomMethod.Add(customMethod);
    //                 List<MethodInfo> w = GetLis(customMethod.CustomMethodType);
    //                 w.Add(methodInfos[i]);
    //             }
    //             // IEnumerable<CustomMethod> customMethods = methodInfos[i].GetCustomAttributes<CustomMethod>();
    //             // foreach (var method in customMethods)
    //             // {
    //             //     _allCustomMethod.Add(method);
    //             //     List<MethodInfo> w = GetLis(method.CustomMethodType);
    //             //     w.Add(methodInfos[i]);
    //             // }
    //         }
    //     }
    //
    //     private List<MethodInfo> GetLis(CustomMethodType customMethodType)
    //     {
    //         List<MethodInfo> w = null;
    //
    //         if (_update.TryGetValue(customMethodType, out w))
    //         {
    //             return w;
    //         }
    //
    //         w = new List<MethodInfo>();
    //         _update.Add(customMethodType, w);
    //         return w;
    //     }
    //
    //     public void Dispatch(CustomMethodType customMethodType, object[] data)
    //     {
    //         List<MethodInfo> w = null;
    //
    //         if (_update.TryGetValue(customMethodType, out w))
    //         {
    //             for (int i = 0; i < w.Count; i++)
    //             {
    //                 w[i].Invoke(_entity, data);
    //             }
    //         }
    //     }
    //
    //     public void Dispose()
    //     {
    //         _update.Clear();
    //         _entity = null;
    //     }
    // }
}