using System; 
 | 
using System.Collections.Generic; 
 | 
using System.Linq; 
 | 
using System.Text; 
 | 
using System.Threading.Tasks; 
 | 
using WIDESEAWCS_Common.TaskEnum; 
 | 
  
 | 
namespace WIDESEAWCS_Common.TaskEnum 
 | 
{ 
 | 
    public static class TaskEnumHelper 
 | 
    { 
 | 
        public static List<int> GetEnumIndexList(this Type type) 
 | 
        { 
 | 
            if (type is null) throw new ArgumentNullException("type"); 
 | 
            if (!type.IsEnum) return new List<int>(); 
 | 
            return Enum.GetValues(type).Cast<int>().ToList(); 
 | 
        } 
 | 
  
 | 
        public static TaskTypeGroup GetTaskTypeGroup(this int taskType) 
 | 
        { 
 | 
            if (!int.TryParse(Enum.Parse<TaskOutboundTypeEnum>(taskType.ToString()).ToString(), out int result)) 
 | 
            { 
 | 
                return TaskTypeGroup.OutbondGroup; 
 | 
            } 
 | 
            else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskType.ToString()).ToString(), out result)) 
 | 
            { 
 | 
                return TaskTypeGroup.InboundGroup; 
 | 
            } 
 | 
            else if (!int.TryParse(Enum.Parse<TaskRelocationTypeEnum>(taskType.ToString()).ToString(), out result)) 
 | 
            { 
 | 
                return TaskTypeGroup.RelocationGroup; 
 | 
            } 
 | 
            else if (!int.TryParse(Enum.Parse<TaskOtherTypeEnum>(taskType.ToString()).ToString(), out result)) 
 | 
            { 
 | 
                return TaskTypeGroup.OtherGroup; 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                throw new NotImplementedException(); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        public static int GetNextNotCompletedStatus<T>(this int currentStatus) where T : Enum 
 | 
        { 
 | 
            Type type = typeof(T); 
 | 
            if (type is null) throw new ArgumentNullException(); 
 | 
            if (!type.IsEnum) return 0; 
 | 
            if (type == typeof(TaskInStatusEnum)) 
 | 
            { 
 | 
                List<int> taskInboundTypes = type.GetEnumIndexList(); 
 | 
                return taskInboundTypes.Where(x => x > currentStatus && x < (int)TaskInStatusEnum.InFinish).OrderBy(x => x).FirstOrDefault(); 
 | 
            } 
 | 
            else if (type == typeof(TaskOutStatusEnum)) 
 | 
            { 
 | 
                return type.GetEnumIndexList().Where(x => x > currentStatus && x < (int)TaskOutStatusEnum.OutFinish).OrderBy(x => x).FirstOrDefault(); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                throw new NotImplementedException(); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
} 
 |