using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using AdamThinkDevicesData;
using AdamSync;
using System.Linq;

/// <summary>
/// 雷达控制
/// </summary>
public class RadarManger : MonoBehaviour
{

    public EquipmentCommon equipmentCommon;
    #region  启动暂停
    private bool _isStartRehearsing = false;
    /// <summary>
    /// 是否正在预演
    /// </summary>
    public bool isStartRehearsing
    {
        get { return _isStartRehearsing; }
        set
        {
            if (_isStartRehearsing != value)
            {
                _isStartRehearsing = value;
                OnActivationChanged?.Invoke(_isStartRehearsing);
            }
        }
    }
    /// <summary>
    /// 布尔值变化时触发的事件
    /// </summary>
    public event System.Action<bool> OnActivationChanged;
    /// <summary>
    /// 协程对象
    /// </summary>
    private Coroutine timerCoroutine;
    /// <summary>
    /// 定时器运行状态
    /// </summary>
    private bool isTimerRunning = false;
    /// <summary>
    /// 间隔时间
    /// </summary>
    public float interval = 5.0f;
    #endregion
    /// <summary>
    /// 雷达UI预制体
    /// </summary>
    public GameObject RadarUiPrefab;
    /// <summary>
    /// 雷达UI
    /// </summary>
    public GameObject RadarUi;
    /// <summary>
    /// 雷达动画
    /// </summary>
    public Animator aniRandar;
    /// <summary>
    /// 雷达UI动画播放
    /// </summary>
    public Animator aniRandarUI;

    #region  雷达数据
    /// <summary>
    /// 转台转速
    /// </summary>
    public string TurntableSpeed;
    /// <summary>
    /// 探测距离
    /// </summary>
    public string DetectionRange;
    /// <summary>
    /// 近盲区
    /// </summary>
    public string NearBlindArea;
    /// <summary>
    /// 批量标处理能力
    /// </summary>
    public string BatchStandardProcessingCapability;
    /// <summary>
    /// 探测成功率
    /// </summary>
    public string DetectionSuccessRate;
    /// <summary>
    /// 最小探测速度
    /// </summary>
    public string MinimumDetectionVelocity;
    /// <summary>
    /// 距离分辨率
    /// </summary>
    public string RangeResolution;
    /// <summary>
    /// 方位分辨率
    /// </summary>
    public string AzimuthResolution;
    /// <summary>
    /// 方位波束宽度
    /// </summary>
    public string AzimuthBeamwidth;
    /// <summary>
    /// 俯仰波束宽度
    /// </summary>
    public string PitchBeamwidth;

    #endregion
    /// <summary>
    /// 检测范围半径
    /// </summary>
    public float detectionRadius = 5f; // 
    /// <summary>
    /// 批量标处理能力
    /// </summary>
    public int NumberOfProbes = 0;
    /// <summary>
    /// 渲染小地图摄像机
    /// </summary>
    public Camera Mincamera;
    /// <summary>
    /// 计时火炮蓄能时间
    /// </summary>
    //public float radartime=0;
    void Start()
    {
        Mincamera = GameObject.Find("Minimap Camera").GetComponent<Camera>();
        equipmentCommon = GetComponent<EquipmentCommon>();
        aniRandar = GetComponent<Animator>();

        if (RadarUi == null)
        {
            CreateRadarUI();
        }
        // 订阅布尔值变化事件
        OnActivationChanged += OnActivationChangedHandler;
        //InvokeRepeating("RetrievalUAV", 1, 5);//测试用
    }

    // Update is called once per frame
    void Update()
    {
        //if (equipmentCommon.isPlayer)
        //    RetrievalUAV();//看向无人机
    }
    #region  启动暂停
    /// <summary>
    /// 导条变化调用
    /// </summary>
    /// <param name="newValue"></param>
    void OnActivationChangedHandler(bool newValue)
    {
        if (newValue)
        {
            Debug.Log("开始检索");
            StartTimer();
        }
        else
        {
            Debug.Log("停止检索");
            StopTimer();
        }
    }


    IEnumerator Timer()
    {
        while (true)
        {
            //Debug.Log("Timer fired at: " + Time.time);
            yield return new WaitForSeconds(5); // 等待一段时间后继续执行
            RetrievalUAV();
        }
    }

    /// <summary>
    /// 开启
    /// </summary>
    public void StartTimer()
    {
        if (equipmentCommon.isPlayer && timerCoroutine == null)
        {
            //timerCoroutine = StartCoroutine(Timer());
            isTimerRunning = true;
        }
    }
    /// <summary>s
    /// 停止
    /// </summary>
    public void StopTimer()
    {
        if (equipmentCommon.isPlayer && timerCoroutine != null)
        {

            StopCoroutine(timerCoroutine);
            timerCoroutine = null;
            isTimerRunning = false;

        }
    }
    #endregion

    /// <summary>
    /// 生成雷达UI
    /// </summary>
    void CreateRadarUI()
    {
        Transform canvas = GameObject.Find("Canvas").transform;
        if (canvas)
        {
            GameObject _object = Instantiate(RadarUiPrefab, canvas);
            RadarUi = _object;
            RadarUi.transform.localScale = Vector3.zero;
            aniRandarUI = RadarUi.GetComponent<Animator>();
            RadarRotationSpeed(TurntableSpeed);
        }

    }

    /// <summary>
    /// 数据写入
    /// </summary>
    /// <param name="weaponitemone"></param>
    public void FillInTheData(List<List_paraItem> weaponitemone)
    {
        //if (equipmentCommon)
        //{
        //    string msg = $"send2room {equipmentCommon.equipmentType}+{transform.position.ToString().Replace(" ", "").Replace("(", "").Replace(")", "")}+{transform.eulerAngles.ToString().Replace(" ", "").Replace("(", "").Replace(")", "")}";
        //    Debug.Log(msg);
        //    _ = SyncCreateRoom.SendMessageAsync(msg);
        //}
        for (int i = 0; i < weaponitemone.Count; i++)
        {
            switch (weaponitemone[i].para_name)
            {
                case "转台转速:":
                    TurntableSpeed = weaponitemone[i].para_value;
                    RadarRotationSpeed(TurntableSpeed);
                    break;
                case "探测距离:":
                    DetectionRange = weaponitemone[i].para_value;
                    detectionRadius = float.Parse(DetectionRange) * 100;
                    Mincamera.orthographicSize = detectionRadius;
                    break;
                case "近盲区:":
                    NearBlindArea = weaponitemone[i].para_value;
                    break;
                case "批量标处理能力:":
                    BatchStandardProcessingCapability = weaponitemone[i].para_value;
                    NumberOfProbes = int.Parse(BatchStandardProcessingCapability);
                    break;
                case "探测成功率:":
                    DetectionSuccessRate = weaponitemone[i].para_value;
                    break;
                case "最小探测速度:":
                    MinimumDetectionVelocity = weaponitemone[i].para_value;
                    break;
                case "距离分辨率:":
                    RangeResolution = weaponitemone[i].para_value;
                    break;
                case "方位分辨率:":
                    AzimuthResolution = weaponitemone[i].para_value;
                    break;
                case "方位波束宽度:":
                    AzimuthBeamwidth = weaponitemone[i].para_value;
                    break;
                case "俯仰波束宽度:":
                    PitchBeamwidth = weaponitemone[i].para_value;
                    break;
                default:
                    break;
            }
        }
    }

    /// <summary>
    /// 雷达转动速度
    /// </summary>
    public void RadarRotationSpeed(string speed)
    {
        float newSpeed = float.Parse(speed);
        if (newSpeed <= 0) return;
        if (aniRandar)
        {
            aniRandar.speed = (1 / newSpeed); // 改变动画的播放速度为新速度值
        }
        if (aniRandarUI)
        {
            aniRandarUI.speed = (1 / newSpeed); // 改变动画的播放速度为新速度值
        }
    }

    /// <summary>
    /// 检索
    /// </summary>
    public void RetrievalUAV()
    {
        List<Collider> colliders = Physics.OverlapSphere(transform.position, detectionRadius).ToList(); // 检索范围内的所有碰撞体
        var colliders2 = colliders.FindAll(x => x.tag == "WRJ");
        Mincamera.orthographicSize = detectionRadius;
        if (colliders2.Count > 0)
        {
            for (int i = 0; i < colliders2.Count; i++)
            {
                UnmannedAerialVehicle unmannedAerialVehicle = colliders2[i].GetComponent<UnmannedAerialVehicle>();
                if (unmannedAerialVehicle)
                {
                    LaserFireControlPlatformManger laserFireControlPlatformManger = LaserFireControlPlatformManger.laserFireControlPlatformMangers.Find(x => (x != null && x.isLasing == false && x.lasertime <= 0));
                    if (laserFireControlPlatformManger)
                    {
                        laserFireControlPlatformManger.lasertime = laserFireControlPlatformManger.storageIntervalTime;
                        laserFireControlPlatformManger.isLasing = true;
                        laserFireControlPlatformManger.targetPoint = unmannedAerialVehicle.transform;
                        laserFireControlPlatformManger.Lasing();
                    }
                }
            }
        }
    }

    private void OnMouseEnter()
    {
        if (UIBootstrap.Instance.GetRoleByIDPracticeId(GlobalFlag.practiceSeatId) != "0")
        {
            Debug.LogError("鼠标进入");
            RadarUi.transform.localScale = Vector3.one;
            Mincamera.transform.position = new Vector3(transform.position.x, 350, transform.position.z);
        }
    }

    private void OnMouseExit()
    {
        Debug.LogError("鼠标离开");
        RadarUi.transform.localScale = Vector3.zero;
    }

    private void OnDestroy()
    {
        Destroy(RadarUi.gameObject);
        OnActivationChanged -= OnActivationChangedHandler;
    }
}