using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Linq;

namespace SimplifyXR
{

    public enum SceneOrModuleLoadType
    {
        AddToScene,
        ReplaceCurrentScene
    }

    public interface IModuleOrSceneReference
    {
        public bool IsModule();
        public string SceneKey();
        public SceneOrModuleLoadType LoadType();
    }

    public class StandardAssetsHelpers
    {      

        public static void HandleModuleSceneLoading(
            IModuleOrSceneReference moduleSceneReference)
        {
            if (moduleSceneReference.IsModule())
            {
                var moduleManager = new ModuleRuntimeManager().runtimeModuleManager;
                moduleManager.LoadModuleAsync(
                    moduleSceneReference.SceneKey(),
                    moduleSceneReference.LoadType() == SceneOrModuleLoadType.AddToScene ?
                    LoadModule.ModuleLoadType.Add :
                    LoadModule.ModuleLoadType.Replace);
            }
            else
            {
                SceneManager.LoadSceneAsync(
                    moduleSceneReference.SceneKey(),
                    moduleSceneReference.LoadType() == SceneOrModuleLoadType.AddToScene ?
                    LoadSceneMode.Additive :
                    LoadSceneMode.Single );
            }
        }


        public static GameObject FindObjectByToolboxAssetType(GameObject gameObject)
        {
            var name = gameObject?.GetComponent<StandardAssetInfo>()?.toolboxName;
            GameObject foundObject = null;

            if (string.IsNullOrEmpty(name))
            {
                if (gameObject.scene == SceneManager.GetActiveScene()) foundObject = gameObject;
            }
            else
            {
                var objects = GameObject.FindObjectsOfType<StandardAssetInfo>(true);
                foundObject = objects?.ToList().Where(e => e.toolboxName == name)?.First().gameObject;
            }
           
            return foundObject;
        }

    }


}


