﻿using JLGames.RocketDriver.Actions.Utils;
using UnityEngine;

namespace JLGames.RocketDriver.Actions.ThreadEvent
{
    public static class MonoEventProxyFactory
    {
        private const string DefaultNodeName = "MonoEventProxy";
        private static MonoEventProxy m_MonoProxy;

        public static MonoEventProxy Proxy
        {
            get
            {
                if (null == m_MonoProxy) m_MonoProxy = GenProxy();
                return m_MonoProxy;
            }
        }

        public static MonoEventProxy GenProxy(string named = DefaultNodeName)
        {
            var monoObj = new GameObject(named) {name = named};
            var proxy = monoObj.AddComponent<MonoEventProxy>();
            Object.DontDestroyOnLoad(monoObj);
            return proxy;
        }

        public static void DestroyProxy()
        {
            DestroyProxy(m_MonoProxy);
            m_MonoProxy = null;
        }

        public static void DestroyProxy(MonoEventProxy proxy)
        {
            if (null == proxy) return;
            TransformUtil.RemoveAndDestroy(proxy.gameObject);
        }
    }
}