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

namespace NodeCanvas.Tasks.MasterAudioIntegration{

	[Category("MasterAudio/Bus")]
	[Icon("MasterAudio")]
	public class FadeBus : ActionTask {

		public bool allBuses = false;
		public BBParameter<string> busName;
		[SliderField(0,1)]
		public BBParameter<float> volume = 1;
		[SliderField(0,1)]
		public BBParameter<float> fadeTime = 0.2f;

	    public bool stopBusAfterFade = false;
	    public bool restoreVolumeAfterFade = false;

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

		protected override string OnInit(){
			if (!allBuses && busName.isNull)
				return "Either check all AllBuses or specify a Bus Name";
			return null;
		}

		protected override void OnExecute(){

			if (allBuses){
				foreach(var bus in MasterAudio.RuntimeBusNames){
					MasterAudio.FadeBusToVolume(bus, volume.value, fadeTime.value, null, stopBusAfterFade, restoreVolumeAfterFade);
				}
			} else {
				MasterAudio.FadeBusToVolume(busName.value, volume.value, fadeTime.value, null, stopBusAfterFade, restoreVolumeAfterFade);
			}
		}

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