using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace ScaffoldingExample.Helpers
{
    /// <summary>
    /// Вспомогательный класс для обработки настроек в виде enum
    /// </summary>
    public static class SettingEnumHelper
    {
        /// <summary>
        /// Возвращает элемент перечисления по строковому значению
        /// </summary>
        public static T ParseEnum<T>(string enumValue)
        {
            try
            {
                return
                    (T)Enum.Parse(typeof(T), enumValue, true);
            }
            catch (Exception e)
            {
                string mes = "Не удалось преобразовать строку '" + enumValue + "' в значение типа '" + typeof(T).FullName + "'";
                throw new Exception(mes, e);
            }
        }

        /// <summary>
        /// Проверка того, что тип данных Enum
        /// </summary>
        public static bool isEnum(string VType)
        {
            return VType.ToUpper().StartsWith("ENUM");
        }

        /// <summary>
        /// Подготовка данных для списка значений
        /// </summary>
        public static List<SelectListItem> SelectListDataFromVType(string VType)
        {
            char[] paramSeparator = new char[1] { '|' };
            char[] keyValueSeparator = new char[1] { '=' };

            List<SelectListItem> Result = new List<SelectListItem>();

            int openBracketPos = VType.IndexOf("[");
            int closeBracketPos = VType.IndexOf("]");
            string dataStr = VType.Substring(openBracketPos + 1, closeBracketPos - openBracketPos - 1);

            //Разделение элементов данных 
            string[] dataArray = dataStr.Split(paramSeparator);
            foreach (string x in dataArray)
            {
                //Разделение ключа и значения
                string[] kv = x.Split(keyValueSeparator);

                //Создание нового элемента
                SelectListItem temp = new SelectListItem();
                temp.Value = kv[0];
                temp.Text = kv[1];

                //Добавление нового элемента
                Result.Add(temp);
            }

            return Result;
        }

        /// <summary>
        /// Получение данных по ключу
        /// </summary>
        public static string SelectListDataValueFromVType(string VType, string keyParam)
        {
            string key = keyParam.Trim().ToUpper();
            List<SelectListItem> data = SelectListDataFromVType(VType);
            string Result = data.First(x => x.Value.Trim().ToUpper() == key).Text;
            return Result;
        }
    }

}