﻿using NodeCanvas.Framework;
using ParadoxNotion.Design;
using DarkTonic.MasterAudio;

namespace NodeCanvas.Tasks.MasterAudioIntegration{

	[Category("MasterAudio/Group")]
	[Icon("MasterAudio")]
	public class FadeGroup : ActionTask {

		public bool allGroups = false;
		public BBParameter<MasterAudioGroup> soundGroup;
		[SliderField(0,1)]
		public BBParameter<float> volume = 1;
		[SliderField(0,1)]
		public BBParameter<float> fadeTime = 0.2f;

        public bool stopGroupAfterFade = false;
        public bool restoreVolumeAfterFade = false;

        protected override string info{
			get {return string.Format("Fade Group {0} to {1}", allGroups? "All" : soundGroup.ToString(), volume);}
		}

		protected override string OnInit(){
			if (!allGroups && soundGroup.isNull)
				return "Either check all allGroups or specify a Group";
			return null;
		}

		protected override void OnExecute(){

			if (allGroups){
				foreach(var group in MasterAudio.RuntimeSoundGroupNames){
					MasterAudio.FadeSoundGroupToVolume(group, volume.value, fadeTime.value, null, stopGroupAfterFade, restoreVolumeAfterFade);
				}
			} else {
				MasterAudio.FadeSoundGroupToVolume(soundGroup.value.name, volume.value, fadeTime.value, null, stopGroupAfterFade, restoreVolumeAfterFade);
			}
		}

		protected override void OnUpdate(){
			if (elapsedTime >= fadeTime.value)
				EndAction();
		}
	}
}