/*           INFINITY CODE          */
/*     https://infinity-code.com    */

using UnityEditor;

namespace InfinityCode.TreeTools.Editors
{
    public abstract class Pref
    {
        public string path;
        public abstract void Load();
    }

    public class Pref<T>: Pref
    {
        public T value { get; private set; }

        public static implicit operator T(Pref<T> v)
        {
            return v.value;
        }

        public static implicit operator Pref<T>(T v)
        {
            return new Pref<T>(v);
        }

        public Pref()
        {

        }

        public Pref (T value)
        {
            this.value = value;
        }

        public override void Load()
        {
            if (!EditorPrefs.HasKey(path)) return;

            if (typeof(T) == typeof(bool)) value = (T)(object)EditorPrefs.GetBool(path);
            else if (typeof(T) == typeof(float)) value = (T)(object)EditorPrefs.GetFloat(path);
        }

        public void Set(T value)
        {
            if (this.value.Equals(value)) return;
            this.value = value;

            if (typeof(T) == typeof(bool)) EditorPrefs.SetBool(path, (bool)(object)value);
            else if (typeof(T) == typeof(float)) EditorPrefs.SetFloat(path, (float)(object)value);
        }
    }
}