// Copyright (c) Meta Platforms, Inc. and affiliates. 

using UnityEngine;
using UnityEngine.UI;

namespace Lofelt.NiceVibrations
{
    public class EmphasisHapticsDemoManager : DemoManager
    {
        [Header("Emphasis Haptics")]
        public MMProgressBar AmplitudeProgressBar;
        public MMProgressBar FrequencyProgressBar;
        public HapticCurve TargetCurve;
        public float EmphasisAmplitude = 1f;
        public float EmphasisFrequency = 1f;
        public Text EmphasisAmplitudeText;
        public Text EmphasisFrequencyText;

        protected virtual void Start()
        {
            FrequencyProgressBar.UpdateBar(1f, 0f, 1f);
            AmplitudeProgressBar.UpdateBar(1f, 0f, 1f);
            TargetCurve.UpdateCurve(EmphasisAmplitude, EmphasisFrequency);

            HapticController.fallbackPreset = HapticPatterns.PresetType.RigidImpact;
        }

        public virtual void UpdateEmphasisAmplitude(float newAmplitude)
        {
            EmphasisAmplitude = newAmplitude;
            EmphasisAmplitudeText.text = NiceVibrationsDemoHelpers.Round(newAmplitude, 2).ToString();
            AmplitudeProgressBar.UpdateBar(EmphasisAmplitude, 0f, 1f);
            TargetCurve.UpdateCurve(EmphasisAmplitude, EmphasisFrequency);
        }

        public virtual void UpdateEmphasisFrequency(float newFrequency)
        {
            EmphasisFrequency = newFrequency;
            EmphasisFrequencyText.text = NiceVibrationsDemoHelpers.Round(newFrequency, 2).ToString();
            FrequencyProgressBar.UpdateBar(EmphasisFrequency, 0f, 1f);
            TargetCurve.UpdateCurve(EmphasisAmplitude, EmphasisFrequency);
        }

        public virtual void EmphasisHapticsButton()
        {
            HapticPatterns.PlayEmphasis(EmphasisAmplitude, EmphasisFrequency);
            StartCoroutine(Logo.Shake(0.2f));
            DebugAudioEmphasis.volume = EmphasisAmplitude;
            DebugAudioEmphasis.pitch = 0.5f + EmphasisFrequency / 2f;
            DebugAudioEmphasis.Play();
        }
    }
}