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

namespace Sevomin.Models.Helpers
{
    public class StringValue : System.Attribute
    {
        private string _value;

        public StringValue(string value)
        {
            _value = value;
        }

        public string Value
        {
            get { return _value; }
        }

    }

    public static class StringEnum
    {
        public static SelectList GetSelectList(Type inputEnum, bool textAsValue)
        {
            List<SelectListItem> retList = new List<SelectListItem>();
            if (inputEnum.IsEnum)
            {
                foreach (Enum property in Enum.GetValues(inputEnum))
                {                    
                    retList.Add(new SelectListItem
                    {
                        Text = GetStringValue(property),
                        Value = Convert.ToInt16(inputEnum.GetField(property.ToString()).GetValue(null)).ToString() //textAsValue ? GetStringValue(property) : property.ToString()
                    });
                }

                return new SelectList(retList, "Value", "Text");
            }
            else
                throw new InvalidOperationException("The input type is not an enum.");
        }

        public static string GetStringValue(Enum value)
        {            
            Type type = value.GetType();

            //Check first in our cached results...
            //Look for our 'StringValueAttribute' 
            //in the field's custom attributes
            FieldInfo fi = type.GetField(value.ToString());
            StringValue[] attrs =
               fi.GetCustomAttributes(typeof(StringValue),
                                       true) as StringValue[];
            foreach (var item in attrs)
            {
                if (!string.IsNullOrEmpty(item.Value))
                    return item.Value;
            }

            return string.Empty;
        }
    }
}
