using System;
using System.Collections.Generic;
using System.Linq;

namespace JiaZhiQuan.Common.Utils {
    public class EnumUtils {
        /// <summary>
        /// 根据指定的输入枚举类型，对字符串进行解析，大小写敏感可指定（默认不敏感）。
        /// 如果转换失败，则返回默认值，如果不是枚举型，则扔出异常。
        /// 用法示例：WorkdayType wt = ParseEnum<WorkdayType >("workday");
        /// </summary>
        /// <typeparam name="T">数据类型。必需为枚举型，如果不是则扔出异常。</typeparam>
        /// <param name="value">输入字符串。</param>
        /// <param name="caseSensitive">是否大小写敏感，默认值为false。</param>
        /// <returns></returns>
        public static T ParseEnum<T>(string value, bool caseSensitive = false) where T : Enum {
            T t = default;
            try {
                foreach (T item in Enum.GetValues(typeof(T))) {
                    bool b1 = item.ToString() == value; // 大小写敏感
                    bool b2 = item.ToString().ToLower() == value.ToLower(); // 大小写不敏感
                    if (caseSensitive ? b1 : b2) {
                        t = item;
                        break;
                    }
                }

                t = (T)Enum.Parse(typeof(T), value);
            } catch { }

            return t;
        }
    }
}
