using UnityEngine;
using UnityEngine.UI;

namespace Gyvr.Mythril2D
{
    public class ScreenFlashGFX : GFXBase
    {
        [SerializeField] private Image flashImage;

        private Coroutine routine;

        private void Awake()
        {
            flashImage.gameObject.SetActive(false);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="colorOverride"></param>
        /// <param name="durationOverride"> Default value (white)</param>
        public void Trigger(Color? colorOverride = null, float durationOverride = 0.2f)
        {
            if (isRunning) Interrupt();

            flashImage.gameObject.SetActive(true);
            Color col = colorOverride ?? Color.white;
            float dur = durationOverride;

            isRunning = true;
            OnStarted?.Invoke();
            routine = StartCoroutine(DoFlash(col, dur));
        }

        protected override void OnTrigger() { }

        private System.Collections.IEnumerator DoFlash(Color col, float dur)
        {
            flashImage.color = new Color(col.r, col.g, col.b, 1f);

            float elapsed = 0f;
            while (elapsed < dur)
            {
                elapsed += Time.deltaTime;
                float alpha = Mathf.Lerp(1f, 0f, elapsed / dur);
                flashImage.color = new Color(col.r, col.g, col.b, alpha);
                yield return null;
            }

            flashImage.color = new Color(col.r, col.g, col.b, 0f);
            Finish();
        }

        public override void Interrupt()
        {
            if (routine != null)
            {
                StopCoroutine(routine);
                routine = null;
            }
            flashImage.color = new Color(Color.white.r, Color.white.g, Color.white.b, 0f);
            flashImage.gameObject.SetActive(false);
            Finish();
        }
    }
}
