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

namespace NodeCanvas.Tasks.MasterAudioIntegration{

	[Category("MasterAudio")]
	[Icon("MasterAudio")]
	public class PlaySound : ActionTask<Transform> {


		[RequiredField]
		public BBParameter<MasterAudioGroup> soundGroup;
		public BBParameter<string> variationName;

		[SliderField(0,1)]
		public BBParameter<float> volume = 1;
		[SliderField(0,10)]
		public BBParameter<float> delay = 0;

		public BBParameter<bool> useLocation = true;
		public BBParameter<bool> attachSound = false;
		public BBParameter<bool> useFixedPitch = false;

		[SliderField(-3,3)]
		public BBParameter<float> fixedPitch;

		protected override string info{
			get {return string.Format("Play {0},{1} Sound", soundGroup, variationName);}
		}

		protected override void OnExecute(){

			var groupName = soundGroup.value.name;
			var childName = variationName.value;
			var willAttach = attachSound.value;
			var use3dLocation = useLocation.value;
			var vol = volume.value;
			var fDelay = delay.value;
			float? pitch = fixedPitch.value;
			if (!useFixedPitch.value) {
				pitch = null;
			}
			
			if (string.IsNullOrEmpty(childName)) {
				childName = null;
			}
			
			if (!use3dLocation && !willAttach) {
				MasterAudio.PlaySoundAndForget(groupName, vol, pitch, fDelay, childName); 
			} else if (!willAttach) {
				MasterAudio.PlaySound3DAtTransformAndForget(groupName, agent, vol, pitch, fDelay, childName); 
			} else {
				MasterAudio.PlaySound3DFollowTransformAndForget(groupName, agent, vol, pitch, fDelay, childName); 
			}

			EndAction();
		}
	}
}