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

public class EnemyPathFinding : MonoBehaviour
{
    [SerializeField] public Transform[] targets;

    [SerializeField] private float ropeDistCheck = 1f;
    [SerializeField] private LayerMask ropeCheckMask;

    private HealthComponent healthComponent;

    NavMeshAgent agent;
    private void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        agent.updateRotation = false;
        agent.updateUpAxis = false;

        healthComponent = GetComponent<HealthComponent>();
        healthComponent.OnHealthZero.AddListener(Rumble);
    }

    private void Rumble()
    {
        RumbleManager.StartRumble(-1, 1f, 1f, 0.5f);
    }

    private void Update()
    {
        if (targets.Length == 0) return;

        Transform closestTarget = GetClosestTarget();
        if (closestTarget == null) return;

        // Make sure no rope parts are in front
        Vector2 dir = closestTarget.position - transform.position;
        if (Physics2D.Raycast(transform.position, dir.normalized, ropeDistCheck, ropeCheckMask)) return;


        try { agent.SetDestination(closestTarget.position); } catch { }// Fuck this error.
    }

    private Transform GetClosestTarget()
    {
        float dist = Mathf.Infinity;
        Transform shortest = targets[0];
        foreach (var target in targets)
        {
            float targetDist = Vector2.Distance(target.position, transform.position);
            if (targetDist < dist)
            {
                dist = targetDist;
                shortest = target;
            }
        }
        return shortest;
    }
}