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

namespace NBF.Setting
{
    public class OptionTable<T>
    {
        public struct OptionEntry
        {
            public string Name;
            public T Value;

            public OptionEntry(string name, T value)
            {
                this.Name = name;
                this.Value = value;
            }
        }

        List<OptionEntry> entries = new List<OptionEntry>();

        public void Add(string name, T value)
        {
            entries.Add(new OptionEntry(name, value));
        }

        public List<string> GetNames() => entries.Select(x => x.Name).ToList();
        public List<T> GetValues() => entries.Select(x => x.Value).ToList();

        public T GetValue(int index)
        {
            if (entries == null) return default;
            if (index < 0 || index >= entries.Count) return default;
            return entries[index].Value;
        }

        public string GetName(int index)
        {
            if (entries == null) return string.Empty;
            if (index < 0 || index >= entries.Count) return string.Empty;
            return entries[index].Name;
        }
    }
}