using System;
using System.Collections.Generic;
using CodeStatisticsCore.Collections;

namespace CodeStatistics.Handling.Languages.Java.Elements{
    [Flags]
    public enum Modifiers{
        None = 0x0,
        Public = 0x1,
        Protected = 0x2,
        Private = 0x4,
        Abstract = 0x8,
        Final = 0x10,
        Static = 0x20,
        Synchronized = 0x40,
        Transient = 0x80,
        Volatile = 0x100,
        Native = 0x200,
        Strictfp = 0x400,
        Default = 0x800
    }

    public static class JavaModifiers{
        private static readonly BiDictionary<Modifiers,string> ModifierDict = new BiDictionary<Modifiers,string>{
            { Modifiers.Public, "public" },
            { Modifiers.Protected, "protected" },
            { Modifiers.Private, "private" },
            { Modifiers.Abstract, "abstract" },
            { Modifiers.Final, "final" },
            { Modifiers.Static, "static" },
            { Modifiers.Synchronized, "synchronized" },
            { Modifiers.Transient, "transient" },
            { Modifiers.Volatile, "volatile" },
            { Modifiers.Native, "native" },
            { Modifiers.Strictfp, "strictfp" },
            { Modifiers.Default, "default" }
        };

        public static IEnumerable<Modifiers> Values { get { return ModifierDict.Keys; } }
        public static IEnumerable<string> Strings { get { return ModifierDict.Values; } }

        public static Modifiers FromString(string str){
            return ModifierDict.GetKey(str);
        }

        public static string ToString(Modifiers modifier){
            return ModifierDict.GetValue(modifier);
        }
    }
}