using System.Linq;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

[RequireComponent(typeof(NavMeshAgent))]
public class MovementController : MonoBehaviour
{
    public NavPoint currentPosition { get; private set; }
    [SerializeField] private MapManager mapManager;
    [SerializeField] private NavMeshAgent navMeshAgent;

    private void Start()
    {
        navMeshAgent.speed = SettingsReader.Instance.GetSettings.movementSpeed;
    }

    public void Move()
    {
        var pointCandidate = getPointCandidate();
        goToNextNavPoint(pointCandidate);
    }

    
    // todo внутри сенсора передавать в mlagents как variable length observations: https://github.com/Unity-Technologies/ml-agents/blob/main/docs/Learning-Environment-Design-Agents.md#variable-length-observations
    private NavPoint getPointCandidate()
    {
        var NavPointsPositions = mapManager.navPoints
            .Select(point => point.transform.position)
            .Where(point => (currentPosition.transform.position - point).magnitude <= SettingsReader.Instance.GetSettings.movementSpeed)
            .ToList();
        //TODO AI
        return null;
    }

    private void goToNextNavPoint(NavPoint destination) =>
        navMeshAgent.SetDestination(destination.transform.position);
}
