using System.Collections.Generic;
using System.Linq;
using NodeCanvas.Framework;
using ParadoxNotion.Design;
using RaycastPro.Detectors;
using RaycastPro.RaySensors;
using UnityEngine;


namespace NodeCanvas.Tasks.Actions{

	[Category("RaycastPro")]
	[Description("Quicly save all detected members into list")]
	public class GetMembers : ActionTask<ColliderDetector>
	{
		[BlackboardOnly]
		[Tooltip("Save list of detected colliders. Return true if detect anything.")]
		public BBParameter<List<Collider>> saveMembers;
		
		[BlackboardOnly]
		[Tooltip("Save list of detected colliders. Return true if detect anything.")]
		public BBParameter<GameObject> saveNearestMember;
		
		[Tooltip("Save list of detected colliders. Return true if detect anything.")]
		public BBParameter<int> saveMembersCount;

		private RaycastHit hit = new RaycastHit();
		
		protected override void OnExecute()
		{
			if (!agent.enabled) agent.Cast();

			if (saveMembers.isDefined)
			{
				saveMembers.value = agent.DetectedColliders.ToList();
			}

			if (saveNearestMember.isDefined)
			{
				agent.GetNearestCollider(out var col);

				saveNearestMember.value = col.gameObject;
			}

			if (saveMembersCount.isDefined)
			{
				saveMembersCount.value = agent.DetectedColliders.Count;
			}


			EndAction(agent.Performed);
		}
	}
}