using System.Collections;
using Unity.Mathematics;
using UnityEngine;
using UnityEngine.Assertions;
using static UnityEngine.GraphicsBuffer;

namespace Gyvr.Mythril2D
{
    public class CameraShakeGFX : GFXBase
    {
            private Coroutine routine;

            // Main trigger with params
            public void Trigger(float amplitude = 0.05f, Vector2 frequency = default, float duration = 0.2f)
            {
                if (isRunning) Interrupt();

                isRunning = true;
                OnStarted?.Invoke();
                routine = StartCoroutine(RunShake(amplitude, frequency, duration));
            }

            protected override void OnTrigger() { /* not used */ }

            private System.Collections.IEnumerator RunShake(float amplitude, Vector2 frequency, float duration)
            {
                // Example shake implementation
                float elapsed = 0f;
            Vector3 initialPosition = Camera.main.transform.localPosition;
                while (elapsed < duration)
                {
                    elapsed += Time.deltaTime;
                    float x = Mathf.Sin(elapsed * frequency.x) * amplitude;
                    float y = Mathf.Sin(elapsed * frequency.y) * amplitude;
                    Camera.main.transform.localPosition = new Vector3(x, y, Camera.main.transform.localPosition.z);
                    yield return null;
                }

                Camera.main.transform.localPosition = initialPosition;
                Finish();
            }

            public override void Interrupt()
            {
                if (routine != null)
                {
                    StopCoroutine(routine);
                    routine = null;
                }

                Camera.main.transform.localPosition = Vector3.zero;
                Finish();
            }
    }
}
