using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
using StarterAssets;
using UnityEngine.InputSystem;
using Unity.VisualScripting;
using TMPro;
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 pfBulletProjectile;
    [SerializeField]
    private Transform firePoint;
    public bool hitTarget;
    [SerializeField]
    private float damage;

    TargetManager targetManager;
    private int shots = 1;
    private int accurateShot = 1;

    [SerializeField]
    private TextMeshProUGUI percentage;
    [SerializeField]
    private GameObject targetPf;
    [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>();
        targetManager = GetComponent<TargetManager>();
    }
    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)
        {
            shots++;
            if (hitTransform != null)
            {
                if (hitTransform.GetComponent<BulletTarget>() != null)
                {
                    Instantiate(vfxGreen, mouseWorldPosition, Quaternion.identity);
                    hitTarget = true;
                    targetManager.TargetLife(targetPf,hitTarget,damage);
                    accurateShot++;
                }
                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;
        }
        Accuracy();
    }
    public void Accuracy() {
        float ratio = (accurateShot * 100) / shots;
        percentage.text = string.Format("{0}%",ratio);
    }
}