using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;

namespace Unity.PlasticSCM.Editor
{
    internal struct UnityObjectInstance
    {
#if UNITY_6000_4_OR_NEWER
        internal static UnityObjectInstance FromEntityId(EntityId entityId)
        {
            return new UnityObjectInstance
            {
                mEntityIdValue = entityId
            };
        }

        EntityId mEntityIdValue;
#else
        internal static UnityObjectInstance FromInstanceId(int instanceID)
        {
            return new UnityObjectInstance
            {
                mIntValue = instanceID
            };
        }

        int mIntValue;
#endif

        internal Object FindObject()
        {
#if UNITY_6000_4_OR_NEWER
            return EditorUtility.EntityIdToObject(mEntityIdValue);
#elif UNITY_6000_3_OR_NEWER
            #pragma warning disable CS0618 // Type or member is obsolete
            return EditorUtility.EntityIdToObject(mIntValue);
            #pragma warning restore CS0618 // Type or member is obsolete
#else
            return EditorUtility.InstanceIDToObject(mIntValue);
#endif
        }

        internal bool MatchesScene(Scene scene)
        {
#if UNITY_6000_4_OR_NEWER
            return scene.handle == SceneHandle.FromRawData(EntityId.ToULong(mEntityIdValue));
#else
            return scene.handle == mIntValue;
#endif
        }
    }
}