using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallController : MonoBehaviour
{
    
    bool isCanShot = true;
    [SerializeField] private Vector2 startPos, endPos, direction; // touch start position, touch end position, swipe direction
    [SerializeField] private float touchTimeStart, touchTimeFinish, timeInterval; // to calculate swipe time to sontrol throw force in Z direction

    [SerializeField]
    float throwForceInXandY = 1f; // to control throw force in X and Y directions

    [SerializeField]
    float throwForceInZ = 500f; // to control throw force in Z direction

    [SerializeField] AudioSource ballAudio;
    [SerializeField] AudioClip Catch;
    [SerializeField] AudioClip Kick;

    [SerializeField] TrailRenderer train;
    Rigidbody rb;
    
    void Start()
    {
        rb = GetComponent<Rigidbody>();
        
        isCanShot = true;
    }

    // Update is called once per frame
    void Update()
    {
        if (!isCanShot) return;
      
        if (Input.GetMouseButtonDown(0))
        {
            // Ghi lại thời gian khi chuột được nhấn và vị trí ban đầu
            touchTimeStart = Time.time;
            startPos = Input.mousePosition;
        }

        // Kiểm tra nếu chuột được thả ra
        if (Input.GetMouseButtonUp(0))
        {
            // Ghi lại thời gian khi chuột được thả ra
            touchTimeFinish = Time.time;

            // Tính toán khoảng thời gian giữa hai lần nhấn chuột
            timeInterval = touchTimeFinish - touchTimeStart;

            // Lấy vị trí chuột khi được thả ra
            endPos = Input.mousePosition;

            //endPos = Camera.main.ScreenToWorldPoint(new Vector3(endPos.x, endPos.y, Camera.main.transform.position.y));
            //startPos = Camera.main.ScreenToWorldPoint(new Vector3(startPos.x, startPos.y, Camera.main.transform.position.y));
            //endPos.                                                                                   
            //float a =  Mathf.Clamp(endPos.y, 0, 600f);
            //endPos = new Vector3(endPos.x, a, endPos.y);
            // Tính toán hướng di chuyển của chuột trong không gian 2D
            direction = startPos - endPos;

            //float a = Mathf.Clamp(direction.x, -500f, 1000f);
            //float b = Mathf.Clamp(direction.y, -500f, 1000f);
            //direction = new Vector2(a, b);

            // Thêm lực cho rigidbody của đối tượng 3D dựa trên hướng và lực ném
           // rb.isKinematic = false;
            rb.AddForce(-direction.x * throwForceInXandY, -direction.y * throwForceInXandY, throwForceInZ / timeInterval);


            isCanShot = false;
            ballAudio.PlayOneShot(Kick);
            // Hủy đối tượng sau 3 giây
            // Destroy(gameObject, 3f);
            Debug.Log(startPos.x - endPos.x);
            if (startPos.x - endPos.x >0 && startPos.x - endPos.x <300)
            {
                
                GameManager.intance.goalkeeperAnimator.Play("Intercept Right Down");
            } 
            else if (endPos.x -startPos.x >0 && endPos.x-startPos.x <300)
            {

                GameManager.intance.goalkeeperAnimator.Play("Intercept Left Down");
            }

            else if (startPos.x - endPos.x >= 300)
            {

                GameManager.intance.goalkeeperAnimator.Play("Intercept Right Middle Long");
            }
            else if (endPos.x - startPos.x >= 300)
            {

                GameManager.intance.goalkeeperAnimator.Play("Intercept Left Middle Long");
            }
            
            StartCoroutine(PlaySoundAfterDelay(3f));
        }
        //}


    }

    IEnumerator PlaySoundAfterDelay(float delay)
    {
        yield return new WaitForSeconds(delay);
        transform.position = Vector3.zero;
        gameObject.SetActive(false);
        //transform.position.vecto
        rb.velocity = Vector3.zero;
        rb.angularVelocity = Vector3.zero;
        train.enabled= false;
        //Debug.Log(transform.position);
        GameManager.intance.SetUpGame();
        isCanShot = true;
        
    }

    public void OpenTrain()
    {
        train.enabled = true;
    }

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
           
            ballAudio.PlayOneShot(Catch);
        }
        
    }

    private void OnTriggerEnter(Collider other)
    {
        
    }

}
