#if USING_ADDRESSABLES
using UnityEditor.AddressableAssets;
using UnityEditor.AddressableAssets.Settings;
using UnityEditor;
using UnityEditor.AddressableAssets.Settings.GroupSchemas;
using UnityEngine;
using UnityEngine.AddressableAssets;
using System.Collections.Generic;

public static class AddressableExtensions
{



    public static string SetAddressableGroup(this Object obj, string groupName)
    {
        var settings = AddressableAssetSettingsDefaultObject.Settings;
        if (settings == null) settings =
                 AddressableAssetSettingsDefaultObject.GetSettings(true);


        if (settings)
        {
            var group = settings.FindGroup(groupName);
            if (!group)
                group = settings.CreateGroup(groupName, false, false, true, null, typeof(ContentUpdateGroupSchema), typeof(BundledAssetGroupSchema));


            group.Settings.BuildRemoteCatalog = true;

            group.Settings.profileSettings.CreateValue("RemoteLoadPath", "");
            group.Settings.profileSettings.CreateValue("RemoteBuildPath", "");

            group.GetSchema<BundledAssetGroupSchema>()
                .BuildPath.SetVariableByName(AddressableAssetSettingsDefaultObject.Settings, "RemoteBuildPath");
            group.GetSchema<BundledAssetGroupSchema>()
              .LoadPath.SetVariableByName(AddressableAssetSettingsDefaultObject.Settings, "RemoteLoadPath");
            settings.RemoteCatalogLoadPath.SetVariableByName(AddressableAssetSettingsDefaultObject.Settings, "RemoteLoadPath");
            settings.RemoteCatalogBuildPath.SetVariableByName(AddressableAssetSettingsDefaultObject.Settings, "RemoteBuildPath");

            var assetpath = AssetDatabase.GetAssetPath(obj);
            var guid = AssetDatabase.AssetPathToGUID(assetpath);

            var e = settings.CreateOrMoveEntry(guid, group, false, false);
            var entriesAdded = new List<AddressableAssetEntry> { e };

            group.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, entriesAdded, false, true);
            settings.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, entriesAdded, true, false);

            return e.address + "|" + guid;
        }

        return null;
    }
}
#endif