using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
using StarterAssets;
using UnityEngine.InputSystem;
using Unity.VisualScripting;
public class TPPController : MonoBehaviour
{
    [SerializeField]
    private CinemachineVirtualCamera aimVirtualCamera;
    [SerializeField]
    private float normalSensitivity;
    [SerializeField]
    private float aimSensitivity;
    [SerializeField]
    private LayerMask aimColliderLayermask = new LayerMask();
    //[SerializeField]
    //private Transform debugTransform;
    [SerializeField]
    private Transform pfBulletProjectile;
    [SerializeField]
    private Transform firePoint;
    public bool HitTarget;

    //[SerializeField]
    //private GameObject targetPf;
    //[SerializeField]
    //public List<Transform> targets = new List<Transform>();
    //private int randomIndex;
    //public float lifeTime = 0f;

    [SerializeField]
    private Transform vfxGreen;
    [SerializeField]
    private Transform vfxRed;

    private StarterAssetsInputs starterAssetsInputs;
    private ThirdPersonController thirdPersonController;

    private Animator animator;

    private void Awake()
    {
        starterAssetsInputs = GetComponent<StarterAssetsInputs>();
        thirdPersonController = GetComponent<ThirdPersonController>();
        animator = GetComponent<Animator>();
    }
    private void Update()
    {
        //lifeTime += Time.deltaTime;
        //TargetLife();
        Vector3 mouseWorldPosition = Vector3.zero;

        Vector2 screenCenterPoint = new Vector2(Screen.width / 2f, Screen.height / 2f);
        Ray hitInfo = Camera.main.ScreenPointToRay(screenCenterPoint);
        Transform hitTransform = null;
        if (Physics.Raycast(hitInfo, out RaycastHit rayCastHit, 999f, aimColliderLayermask))
        {
            //debugTransform.position = rayCastHit.point;
            mouseWorldPosition = rayCastHit.point;
            hitTransform = rayCastHit.transform;
        }

        if(starterAssetsInputs.aim)
        {
            aimVirtualCamera.gameObject.SetActive(true);
            thirdPersonController.SetSensitivity(aimSensitivity);
            thirdPersonController.SetRotateOnMove(false);
            animator.SetLayerWeight(1, Mathf.Lerp(animator.GetLayerWeight(1),1f,Time.deltaTime * 13f));


            Vector3 worldAimTarget = mouseWorldPosition;
            worldAimTarget.y = transform.position.y;
            Vector3 aimDirection = (worldAimTarget - transform.position).normalized;

            transform.forward = Vector3.Lerp(transform.forward, aimDirection, Time.deltaTime * 20f);
        }
        else
        {
            aimVirtualCamera.gameObject.SetActive(false);
            thirdPersonController.SetSensitivity(normalSensitivity);
            thirdPersonController.SetRotateOnMove(true);
            animator.SetLayerWeight(1, Mathf.Lerp(animator.GetLayerWeight(1), 0f, Time.deltaTime * 13f));
        }

        if(starterAssetsInputs.shoot)
        {
            
            if (hitTransform != null)
            {
                if (hitTransform.GetComponent<BulletTarget>() != null)
                {
                    Instantiate(vfxGreen, mouseWorldPosition, Quaternion.identity);
                    HitTarget = true;
                    //TargetLife();
                }
                else
                {
                    Instantiate(vfxRed, mouseWorldPosition, Quaternion.identity);
                    //HitTarget=false;
                }
            }
            
            //Projectile
            /*
            Vector3 aimDirection = (mouseWorldPosition - firePoint.position).normalized;
            Instantiate(pfBulletProjectile, firePoint.position, Quaternion.LookRotation(aimDirection,Vector3.up));
            */
            starterAssetsInputs.shoot = false;
        }
    }
    /*
    public void TargetLife()
    {

        if (lifeTime == 5 || HitTarget)
        {
            randomIndex = Random.Range(0, 216);
            for (int i = 0; i < targets.Count; i++)
            {
                //randPos = targets[randomIndex].position;
                targetPf.SetActive(false);
                targetPf.transform.position = targets[randomIndex].transform.position;
                targetPf.SetActive(true);

            }
            lifeTime = 0;
            HitTarget = false;
            //Debug.Log(controller.HitTarget);
        }
    }
    */
}