using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;

[RequireComponent(typeof(NPC))]
class EscapingWizard : MonoBehaviour
{

    private Rigidbody2D myRigidbody;
    public Animator anim;

    private Vector2 movement;
    public bool shouldRotate;
    public Vector3 dir;

    [Header("Following Logic")]
    public Transform targetPosition;

    public AStarPathfindingAgent agent;

    public bool isDuringEscaping = false; // var is setted by trigger range 

    public float escapingRadius = 6f;  // radious where Wizard start escaping if player is in 


    public void Awake()
    {
        agent = GetComponent<AStarPathfindingAgent>();
    }

    private void Start()
    {
        
    }

    private void Update()
    {
        if(targetPosition == null)
        {
            targetPosition = GameObject.FindGameObjectWithTag("SceneTransition")?.transform;
        }


        //StopAllCoroutines();

        if (IsInEscapingRadious())
        {
            gameObject.GetComponent<NPC>().State = NPCStateEnum.Walking;

            // Animation config
            dir = targetPosition.position - transform.position;
            float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
            dir.Normalize();
            movement = dir;
            anim.SetBool("isRunning", movement != Vector2.zero);

            if (shouldRotate)
            {
                anim.SetFloat("Xinfo", dir.x);
                anim.SetFloat("Yinfo", dir.y);
            }

            agent.point = targetPosition.position;
            agent.FindPoint();

            StartCoroutine(agent.FollowPath());
        } else
        {
            anim.SetBool("isRunning", false);

            gameObject.GetComponent<NPC>().State = NPCStateEnum.Pending;
        }
    }

    public bool IsInEscapingRadious()
    {
        if (Vector2.Distance(GameObject.FindGameObjectWithTag("Player").transform.position, transform.position) >= escapingRadius)
            return false;

        return true;
    }

    public void OnCollisionEnter2D(Collision2D collision)
    {
        if(collision.collider.tag == "SceneTransition")
        {
            Destroy(gameObject);
        }
    }
}