using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

/// <summary>
/// 激光火控平台
/// </summary>
public class LaserFireControlPlatformManger : MonoBehaviour
{
    /// <summary>
    /// 所有激光火控平台
    /// </summary>
    public static List<LaserFireControlPlatformManger> laserFireControlPlatformMangers = new List<LaserFireControlPlatformManger>();
    /// <summary>
    /// 是否正在预演
    /// </summary>
    public bool isStartRehearsing = false;

    /// <summary>
    /// 测试用
    /// </summary>
    public string msg;
    /// <summary>
    /// 测试接受数据
    /// </summary>
    private Weaponitemone weaponitemones;

    #region  激光火控平台数据
    /// <summary>
    /// 储能间隔时间
    /// </summary>
    public string StorageIntervalTime;
    /// <summary>
    /// 毁伤目标累积作用时间
    /// </summary>
    public string CumulativeActionTimeOfDamageTarget;
    /// <summary>
    /// 干扰距离
    /// </summary>
    public string InterferenceDistance;
    /// <summary>
    /// 干扰角度
    /// </summary>
    public string InterferenceAngle;

    #endregion

    #region 激光
    public bool isLasing = false;
    public GameObject LaserModer;
    public GameObject LaserPoint;
    public Transform targetPoint; // 锁定目标点的Transform组件
    public GameObject InnerLaserlineRendererPrefab; // 用于绘制射线的LineRenderer组件
    public GameObject OuterLaserlineRendererPrefab; // 用于绘制射线的LineRenderer组件
    public LineRenderer InnerLaserlineRenderer; // 用于绘制射线的LineRenderer组件
    public LineRenderer OuterLaserlineRenderer; // 用于绘制射线的LineRenderer组件
    private Vector3 laserStartPoint = Vector3.zero;
    private Vector3 laserEndPoint = Vector3.zero;
    public float FireSpeed = 20.0f;//激光速度
    #endregion
    // Start is called before the first frame update
    void Start()
    {
        laserFireControlPlatformMangers.Add(this);
        weaponitemones = Newtonsoft.Json.JsonConvert.DeserializeObject<Weaponitemone>(msg);
        FillInTheData(weaponitemones);//测试写入

        //生成激光
        GameObject _InnerLaserlineRenderer = Instantiate(InnerLaserlineRendererPrefab);
        _InnerLaserlineRenderer.transform.position = Vector3.zero;
        _InnerLaserlineRenderer.transform.SetParent(transform);
        InnerLaserlineRenderer = _InnerLaserlineRenderer.GetComponent<LineRenderer>();

        GameObject _OuterLaserlineRenderer = Instantiate(OuterLaserlineRendererPrefab);
        _OuterLaserlineRenderer.transform.position = Vector3.zero;
        _OuterLaserlineRenderer.transform.SetParent(transform);
        OuterLaserlineRenderer = _OuterLaserlineRenderer.GetComponent<LineRenderer>();
        //发射激光
        //lineRenderer = gameObject.AddComponent<LineRenderer>(); // 在当前GameObject上添加LineRenderer组件
        InnerLaserlineRenderer.positionCount = 2; // 设置线段的端点数量为2
        OuterLaserlineRenderer.positionCount = 2; // 设置线段的端点数量为2
    }

    // Update is called once per frame
    void Update()
    {
       
    }


    /// <summary>
    /// 数据写入
    /// </summary>
    /// <param name="weaponitemone"></param>
    public void FillInTheData(Weaponitemone weaponitemone)
    {
        for (int i = 0; i < weaponitemone.data.Count; i++)
        {
            switch (weaponitemone.data[i].para_name)
            {
                case "储能间隔时间:":
                    StorageIntervalTime = weaponitemone.data[i].para_value;
                    break;
                case "毁伤目标累积作用时间:":
                    CumulativeActionTimeOfDamageTarget = weaponitemone.data[i].para_value;
                    break;
                case "干扰距离:":
                    InterferenceDistance = weaponitemone.data[i].para_value;
                    break;
                case "干扰角度:":
                    InterferenceAngle = weaponitemone.data[i].para_value;
                    break;
                default:
                    break;
            }
        }
    }

    /// <summary>
    /// 发射激光
    /// </summary>
    public void Lasing()
    {
        if (targetPoint != null)
        {
            if (isLasing) return;
            isLasing = true;
            LaserModer.transform.DOLookAt(targetPoint.position, 0.3f).OnComplete(()=> {
                
                laserStartPoint = LaserPoint.transform.position;
                Debug.Log("目标点位..:"+targetPoint.position);
                //laserEndPoint = Vector3.Lerp(laserStartPoint, targetPoint.position, FireSpeed * Time.deltaTime);
                laserEndPoint = targetPoint.position;
                CastRayAndRender();
            });
        }
        else
        {
            Debug.LogError("没有目标");
        }
    }

    public LayerMask layerMask; // 用于指定需要检测的层级

    /// <summary>
    /// 激光显示
    /// </summary>
    public void CastRayAndRender()
    {
        if (InnerLaserlineRenderer)
        {
            InnerLaserlineRenderer.SetPosition(0, laserStartPoint); // 设置线段起点为物体位置
            InnerLaserlineRenderer.SetPosition(1, laserEndPoint); // 设置线段终点为目标点
        }
        if (OuterLaserlineRenderer)
        {
            OuterLaserlineRenderer.SetPosition(0, laserStartPoint); // 设置线段起点为物体位置
            OuterLaserlineRenderer.SetPosition(1, laserEndPoint); // 设置线段终点为目标点
        }
        StrikeDrone(targetPoint.transform);
    }

    /// <summary>
    /// 打击无人机
    /// </summary>
    private void StrikeDrone(Transform hit)
    {
       if(hit.transform.tag== "WRJ")
        {
            UnmannedAerialVehicle unmannedAerialVehicle = hit.GetComponent<UnmannedAerialVehicle>();
            if (unmannedAerialVehicle)
            {
                unmannedAerialVehicle.BeAssaulted("激光打击");
                StartCoroutine(LaserExtinction());
            }
        }
    }

    /// <summary>
    /// 隐藏激光
    /// </summary>
    public IEnumerator LaserExtinction()
    {
        yield return new WaitForSeconds(0.1f);
        if (InnerLaserlineRenderer)
        {
            InnerLaserlineRenderer.SetPosition(0, laserStartPoint); // 设置线段起点为物体位置
            InnerLaserlineRenderer.SetPosition(1, laserStartPoint); // 设置线段终点为目标点
        }
        if (OuterLaserlineRenderer)
        {
            OuterLaserlineRenderer.SetPosition(0, laserStartPoint); // 设置线段起点为物体位置
            OuterLaserlineRenderer.SetPosition(1, laserStartPoint); // 设置线段终点为目标点
        }
        isLasing = false;
    }
}