using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;

namespace Platform101XP.Editor.Settings.Utilities
{
    public static class AssetUtility
    {
        public static TAsset CreateOrLoadAsset<TAsset>(string assetPath)
            where TAsset : ScriptableObject
        {
            var asset = AssetDatabase.LoadAssetAtPath<TAsset>(assetPath);
            if (asset == null)
            {
                var directory = Path.GetDirectoryName(assetPath);
                if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }

                asset = ScriptableObject.CreateInstance<TAsset>();
                AssetDatabase.CreateAsset(asset, assetPath);
            }

            return asset;
        }

        public static void SaveAsset<TAsset>(TAsset asset)
            where TAsset : ScriptableObject
        {
            EditorUtility.SetDirty(asset);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }
    }
}