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

/// <summary>
/// 无人机视角显示
/// </summary>
public class DroneViewDisplay : MonoSingleton<DroneViewDisplay>
{
    public Transform uiParent;
    #region UI
    /// <summary>
    /// WRJUI集合
    /// </summary>
    public static List<RadioAngleView> radioAngleViews = new List<RadioAngleView>();

    /// <summary>
    /// 所有无人机RenderTexture集合
    /// </summary>
    public static List<RenderTexture> renderTextures = new List<RenderTexture>();
    /// <summary>
    /// UIPrefab
    /// </summary>
    [Header("UIPrefab")]
    public GameObject prefabRadioAngleView;
    /// <summary>
    /// 放大显示
    /// </summary>
    [Header("放大显示")]
    public Transform radioAngleViewMax;
    /// <summary>
    /// 放大显示无人机名称
    /// </summary>
    [Header("放大显示无人机名称")]
    public Text textNmme;
    /// <summary>
    /// 放大显示关闭按钮
    /// </summary>
    [Header("放大显示关闭按钮")]
    public Button btnClose;
    /// <summary>
    /// 放大显示视角显示RawImage
    /// </summary>
    [Header("无线电探测放大显示视角显示RawImage")]
    public RawImage rawShow;
    #endregion


    // Start is called before the first frame update
    void Start()
    {
        renderTextures.Clear();
        radioAngleViews.Clear();
        Debug.Log(GlobalFlag.blueOrRed);
        transform.localScale = GlobalFlag.blueOrRed == 0 ? Vector3.one : Vector3.zero;
        btnClose.onClick.AddListener(() => { radioAngleViewMax.localScale = Vector3.zero; });
    }

    /// <summary>
    /// 显示UI
    /// </summary>
    /// <param name="unmannedAerialVehicleManage">无人机脚本</param>
    /// <param name="isShow">是否显示</param>
    public void CreateUI(UnmannedAerialVehicleManage unmannedAerialVehicleManage, bool isShow)
    {
        if (unmannedAerialVehicleManage.equipmentCommon.deviceID.Length < 10) return;
        RadioAngleView radioAngleView = radioAngleViews.Find(x => x.deviceID == unmannedAerialVehicleManage.equipmentCommon.deviceID);
        if (radioAngleView)
        {
            radioAngleView.transform.SetAsFirstSibling(); // 移到父物体的第一个位置
            radioAngleView.transform.localScale = Vector3.one;
            textNmme.text = unmannedAerialVehicleManage.transform.name;
            rawShow.texture = unmannedAerialVehicleManage.wrjModel == WRJModel.电子侦察无人机 ?
                unmannedAerialVehicleManage.dzWRJCamera.targetTexture : unmannedAerialVehicleManage.gxWRJCamera.targetTexture;

        }
        else
        {
            if (unmannedAerialVehicleManage.wrjModel == WRJModel.电子侦察无人机 || unmannedAerialVehicleManage.wrjModel == WRJModel.光学无人机)
            {
                GameObject wrj = Instantiate(prefabRadioAngleView, uiParent);
                wrj.transform.localScale = Vector3.zero;
                wrj.name = unmannedAerialVehicleManage.transform.name;
                wrj.transform.SetAsLastSibling();// 移到父物体的最后一个位置
                RadioAngleView radioAngleViewMain = wrj.GetComponent<RadioAngleView>();
                if (radioAngleViewMain)
                {
                    radioAngleViewMain.deviceID = unmannedAerialVehicleManage.equipmentCommon.deviceID;
                    radioAngleViewMain.textNmme.text = unmannedAerialVehicleManage.transform.name;
                    radioAngleViewMain.typeWRJ = unmannedAerialVehicleManage.wrjModel;
                    Mask mask = wrj.transform.GetComponentInChildren<Mask>();
                    if (mask)
                        mask.enabled = unmannedAerialVehicleManage.wrjModel == WRJModel.电子侦察无人机 ? true : false;

                    // 创建 RenderTexture
                    RenderTexture renderTexture = new RenderTexture(500, 500, 0);
                    renderTexture.name = unmannedAerialVehicleManage.equipmentCommon.deviceID;
                    if (unmannedAerialVehicleManage.wrjModel == WRJModel.电子侦察无人机)
                    {
                        unmannedAerialVehicleManage.dzWRJCamera.gameObject.SetActive(true);
                    }
                    else
                    {
                        unmannedAerialVehicleManage.gxWRJCamera.gameObject.SetActive(true);
                    }
                    unmannedAerialVehicleManage.dzWRJCamera.targetTexture = renderTexture;
                    unmannedAerialVehicleManage.gxWRJCamera.targetTexture = renderTexture;
                    radioAngleViewMain.rawShow.texture = unmannedAerialVehicleManage.wrjModel == WRJModel.电子侦察无人机 ?
                unmannedAerialVehicleManage.dzWRJCamera.targetTexture : unmannedAerialVehicleManage.gxWRJCamera.targetTexture;

                    renderTextures.Add(renderTexture);
                    radioAngleViews.Add(radioAngleViewMain);

                }
            }
        }
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="deviceID"></param>
    /// <param name="camera"></param>
    /// <param name="rawImage"></param>
    public void CreateUI(string deviceID, Camera camera, RawImage rawImage)
    {
        if (deviceID.Length < 10) return;
        var v = renderTextures.Find(x => x.name == deviceID);
        if (v != null) return;
        RenderTexture renderTexture = new RenderTexture(500, 500, 0);
        renderTexture.name = deviceID;
        camera.targetTexture = renderTexture;
        rawImage.texture = renderTexture;
        renderTextures.Add(renderTexture);
    }

    /// <summary>
    /// 删除无人机UI
    /// </summary>
    /// <param name="deviceID"></param>
    public void DistroyUI(string deviceID)
    {
        if (deviceID.Length < 10) return;
        RadioAngleView radioAngleView = radioAngleViews.Find(x => x != null && x.deviceID == deviceID);
        if (radioAngleView)
        {
            Destroy(radioAngleView.gameObject);
            for (int i = 0; i < radioAngleViews.Count; i++)
            {
                if (radioAngleViews[i] == null)
                {
                    radioAngleViews.RemoveAt(i);
                }
            }
        }
        RenderTexture renderTexture = renderTextures.Find(x => x != null && x.name.Contains(deviceID));
        if (renderTexture)
        {
            Debug.Log("删除了" + renderTexture.name);
            Destroy(renderTexture);
            for (int i = 0; i < renderTextures.Count; i++)
            {
                if (renderTextures[i] == null)
                {
                    renderTextures.RemoveAt(i);
                }
            }
        }
    }

    /// <summary>
    /// 根据deviceID返回RenderTexture
    /// </summary>
    /// <param name="deviceID"></param>
    /// <returns></returns>
    public RenderTexture renderTextureTo(string deviceID)
    {
        RenderTexture radioAngleView = null;
        if (renderTextures.Count == 0) return null;
        for (int i = 0; i < renderTextures.Count; i++)
        {
            if (renderTextures[i] != null && renderTextures[i].name == deviceID)
            {
                radioAngleView = renderTextures[i];
                return radioAngleView;
            }
        }
        return radioAngleView;
    }

    /// <summary>
    /// 打开放大UI
    /// </summary>
    /// <param name="_textNmme"></param>
    /// <param name="rawShow"></param 
    public void RadioAngleViewMaxShow(string _textNmme, RawImage _rawShow, WRJModel wRJModel)
    {
        rawShow.texture = null;
        radioAngleViewMax.localScale = Vector3.one;
        textNmme.text = _textNmme;
        rawShow.texture = _rawShow.texture;
        Mask mask = radioAngleViewMax.transform.GetComponentInChildren<Mask>();
        if (mask)
            mask.enabled = wRJModel == WRJModel.电子侦察无人机 ? true : false;

    }


    void OnDestroy()
    {
        for (int i = 0; i < renderTextures.Count; i++)
        {
            Destroy((RenderTexture)renderTextures[i]);
        }
    }
}