﻿using Impact.Utility.ObjectPool;
using UnityEngine;

namespace Impact.Integration.Wwise
{
    public class WwiseEmitterPool : ObjectPool<WwiseEmitterPooledObject>
    {
        private static WwiseEmitterPool instance;

        public static WwiseEmitterPool CreateInstance()
        {
            GameObject g = new GameObject("Impact Wwise Emitter Pool");
            DontDestroyOnLoad(g);
            instance = g.AddComponent<WwiseEmitterPool>();
            instance.Initialize(100, ObjectPoolFallbackMode.None);

            return instance;
        }

        public static WwiseEmitterPooledObject GetEmitterObject()
        {
            if (instance == null)
                CreateInstance();

            if (instance.GetObject(0, out WwiseEmitterPooledObject result))
                return result;

            return null;
        }

        protected override WwiseEmitterPooledObject createPooledObjectInstance(int index)
        {
            GameObject g = new GameObject("Impact Wwise Emitter " + index);
            g.transform.SetParent(this.transform);

            WwiseEmitterPooledObject wwiseEmitter = g.AddComponent<WwiseEmitterPooledObject>();
            wwiseEmitter.OriginalParent = this.transform;
            wwiseEmitter.MakeAvailable();

            return wwiseEmitter;
        }

        protected override void OnDestroy()
        {
            base.OnDestroy();
            instance = null;
        }
    }
}
