using SC.XR.Unity.Module_InputSystem;
using Blue;
using System.Collections.Generic;
using UnityEngine;

public class UICallManager : MonoSingleton<UICallManager>,IController
{

   private delegate void TrackingFound(DataItem tagobj);
   private delegate void TrackingLast(DataItem tagobj);
   private delegate void Invite(string control, string roomid);
   private delegate void TimeOut();
    private delegate void NoExpert();
    /// <summary>
    ///  物体识别到显示  
    /// </summary>
    private event TrackingFound OnTrackFound;

    /// <summary>
    ///  物体超出显示范围 隐藏
    /// </summary>
    private event TrackingLast OnTrackLast;

    /// <summary>
    /// 收到邀请
    /// </summary>
    private event Invite OnInvite;

    /// <summary>
    /// 超时
    /// </summary>
    private event TimeOut OnTimeOut;
    /// <summary>
    /// 无专家
    /// </summary>
    private event NoExpert OnNoExpert;

    private void Start()
    {
        DispatcherBase.KeyDownDelegateRegister(AnyDown);
        DispatcherBase.KeyUpDelegateRegister(AnyUp);
        OnTrackFound += OnTrackfound;
        OnTrackLast += OnTracklast;
      //  MachineRoomInit("");
       // MachineRoomInit();
       
    }

    public void OnTrackfound(DataItem item)
    {

        // ScenesManager.Instance.showWindow(ScenesManager.SceneType.Navigationing);
        if(HeadBtnManager.Instance.type == ScenesManager.SceneType.ShowDH)
        HeadBtnManager.Instance.uiFollow.Hide();
    }

    public void OnTracklast(DataItem item)
    {
        //ScenesManager.Instance.showWindow(ScenesManager.SceneType.ShowXunJian);
        //ShowXunJian.Instance.gotoWindow(ScenesManager.SceneType.ShowDH);
    }

    public void EventInvite(string control, string roomId)
    {
        OnInvite?.Invoke(control, roomId);
    }

    public void EventTimeOut()
    {
        OnTimeOut?.Invoke();
    }

    public void EventNoExpert()
    {
        OnNoExpert?.Invoke();
    }

    /// <summary>
    ///  设置MQTT房间ID
    /// </summary>
    public void SetMQTTRoomId(string roomId)
    {
        MQTTManager.Instance.SetRoomId(roomId);
    }

    private void AnyUp(InputKeyCode keyCode, InputDevicePartBase part)
    {
      //  Debug.Log("DGJ ====>  AnyUp  " + keyCode.ToString());
        // UILogManager.Instance.SendLogText(3, part.PartType.ToString());
        if (part.PartType == InputDevicePartType.KSRight )
        {
            switch (keyCode)
            {
                case InputKeyCode.Enter:             
                    break;
                case InputKeyCode.Cancel:
                    break;
                case InputKeyCode.Trigger:
                    break;
                case InputKeyCode.Function:
                    break;
                case InputKeyCode.Back:
                    break;
                case InputKeyCode.Tp:
                    break;
                case InputKeyCode.VolumeDown:
                    break;
                case InputKeyCode.VolumeUp:
                    break;
                case InputKeyCode.A:
                    break;
                case InputKeyCode.B:
                    break;
                case InputKeyCode.LjoystickKey:
                    break;
                case InputKeyCode.LFunction:
                    break;
                case InputKeyCode.LHallInside:
                    break;
                case InputKeyCode.LHallForward:
                    break;
                case InputKeyCode.LTrigger:
                    break;
                case InputKeyCode.X:
                    break;
                case InputKeyCode.Y:
                    break;
                case InputKeyCode.RjoystickKey:
                    break;
                case InputKeyCode.RFunction: // 返回主界面

                    Debug.Log("DGJ  ====> RFunction  按了  ");
                     //  ScenesManager.Instance.showWindow(ScenesManager.SceneType.ShowChoose);
                    break;
                case InputKeyCode.RHallInside:
                    break;
                case InputKeyCode.RHallForward:
                    break;
                case InputKeyCode.RTrigger:
                    break;
                case InputKeyCode.UP:
                    break;
                case InputKeyCode.DOWN:
                    break;
                case InputKeyCode.RIGHT:
                    break;
                case InputKeyCode.LEFT:
                    break;
                case InputKeyCode.OTHER:
                    break;
                case InputKeyCode.NULL:
                    break;
                default:
                    break;
            }

        }

        if (part.PartType == InputDevicePartType.KSLeft)
        {
            switch (keyCode)
            {
                case InputKeyCode.Enter:
                    break;
                case InputKeyCode.Cancel:
                    break;
                case InputKeyCode.Trigger:
                    break;
                case InputKeyCode.Function:
                    break;
                case InputKeyCode.Back:
                    break;
                case InputKeyCode.Tp:
                    break;
                case InputKeyCode.VolumeDown:
                    break;
                case InputKeyCode.VolumeUp:
                    break;
                case InputKeyCode.A:
                    break;
                case InputKeyCode.B:
                    break;
                case InputKeyCode.LjoystickKey:
                    break;
                case InputKeyCode.LFunction:
                    break;
                case InputKeyCode.LHallInside:
                    break;
                case InputKeyCode.LHallForward:
                    break;
                case InputKeyCode.LTrigger:
                    break;
                case InputKeyCode.X:
                    break;
                case InputKeyCode.Y:
                    break;
                case InputKeyCode.RjoystickKey:
                    break;
                case InputKeyCode.RFunction:
                    break;
                case InputKeyCode.RHallInside:
                    break;
                case InputKeyCode.RHallForward:
                    break;
                case InputKeyCode.RTrigger:
                    break;
                case InputKeyCode.UP:
                    break;
                case InputKeyCode.DOWN:
                    break;
                case InputKeyCode.RIGHT:
                    break;
                case InputKeyCode.LEFT:
                    break;
                case InputKeyCode.OTHER:
                    break;
                case InputKeyCode.NULL:
                    break;
                default:
                    break;
            }
        }
    }

    private void AnyDown(InputKeyCode keyCode, InputDevicePartBase part)
    {

     //   Debug.Log("DGJ ====>  AnyDown  " + keyCode.ToString());

        // UILogManager.Instance.SendLogText(3, part.PartType.ToString());
        if (part.PartType == InputDevicePartType.KSRight)
        {
            switch (keyCode)
            {
                case InputKeyCode.Enter:
                    break;
                case InputKeyCode.Cancel:
                    break;
                case InputKeyCode.Trigger:
                    break;
                case InputKeyCode.Function:
                    break;
                case InputKeyCode.Back:
                    break;
                case InputKeyCode.Tp:
                    break;
                case InputKeyCode.VolumeDown:
                    break;
                case InputKeyCode.VolumeUp:
                    break;
                case InputKeyCode.A:
                    break;
                case InputKeyCode.B:
                    break;
                case InputKeyCode.LjoystickKey:
                    break;
                case InputKeyCode.LFunction:
                    break;
                case InputKeyCode.LHallInside:
                    break;
                case InputKeyCode.LHallForward:
                    break;
                case InputKeyCode.LTrigger:
                    break;
                case InputKeyCode.X:
                    break;
                case InputKeyCode.Y:
                    break;
                case InputKeyCode.RjoystickKey:
                    break;
                case InputKeyCode.RFunction:
                    Debug.Log("DGJ  ====> RFunction  按了  ");
                    break;
                case InputKeyCode.RHallInside:
                    break;
                case InputKeyCode.RHallForward:
                    break;
                case InputKeyCode.RTrigger:
                    break;
                case InputKeyCode.UP:
                    break;
                case InputKeyCode.DOWN:
                    break;
                case InputKeyCode.RIGHT:
                    break;
                case InputKeyCode.LEFT:
                    break;
                case InputKeyCode.OTHER:
                    break;
                case InputKeyCode.NULL:
                    break;
                default:
                    break;
            }
        }

        if (part.PartType == InputDevicePartType.KSLeft)
        {
            switch (keyCode)
            {
                case InputKeyCode.Enter:
                    break;
                case InputKeyCode.Cancel:
                    break;
                case InputKeyCode.Trigger:
                    break;
                case InputKeyCode.Function:
                    break;
                case InputKeyCode.Back:
                    break;
                case InputKeyCode.Tp:
                    break;
                case InputKeyCode.VolumeDown:
                    break;
                case InputKeyCode.VolumeUp:
                    break;
                case InputKeyCode.A:
                    break;
                case InputKeyCode.B:
                    break;
                case InputKeyCode.LjoystickKey:
                    break;
                case InputKeyCode.LFunction:
                    break;
                case InputKeyCode.LHallInside:
                    break;
                case InputKeyCode.LHallForward:
                    break;
                case InputKeyCode.LTrigger:
                    break;
                case InputKeyCode.X:
                    break;
                case InputKeyCode.Y:
                    break;
                case InputKeyCode.RjoystickKey:
                    break;
                case InputKeyCode.RFunction:
                    break;
                case InputKeyCode.RHallInside:
                    break;
                case InputKeyCode.RHallForward:
                    break;
                case InputKeyCode.RTrigger:
                    break;
                case InputKeyCode.UP:
                    break;
                case InputKeyCode.DOWN:
                    break;
                case InputKeyCode.RIGHT:
                    break;
                case InputKeyCode.LEFT:
                    break;
                case InputKeyCode.OTHER:
                    break;
                case InputKeyCode.NULL:
                    break;
                default:
                    break;
            }
        }

    }

    /// <summary>
    ///  机房场景的初始化
    /// </summary>
    /// <param name="msg"> 机房信息 </param>
    public void MachineRoomInit( string msg)
    {

        Debug.Log("DGJ  ===>  MachineRoomInit  ");

        MachineRoomManager.Instance.Init();
    }

    /// <summary>
    ///  获取机房列表
    /// </summary>
    public List<string> GetMachineRoomList()
    {

        return MachineRoomManager.Instance.listRoomName;
    }

    /// <summary>
    ///  获取机房数据
    /// </summary>
    /// <returns></returns>
    public MachineRoomData GetMachineRoomData( string machineRoomName)
    {

        // 根据机房名称从后台获取机房信息

        return MachineRoomManager.Instance.data;

    } 
    /// <summary>
    /// 场景物体初始化
    /// </summary>
    public void MachineRoomInit()
    {
        MachineRoomManager.Instance.SceneInit();
     
    }

    public MachineObj QueryMachineObj(string id)
    {
        for (int i = 0; i < MachineRoomManager.Instance.listObjes.Count; i++)
        {
            if(id == MachineRoomManager.Instance.listObjes[i].deviceParameters.deviceId)
            {

                return MachineRoomManager.Instance.listObjes[i];
            }
        }

        return null;
    }

    /// <summary>
    /// 获取ShowDevice位置
    /// </summary>
    /// <param name="showDeviceTransform"></param>
    public void ShowDeviceTransform(Transform showDeviceTransform)
    {
        this.SendCommand(new ShowDeviceCommand(showDeviceTransform));
    }

    /// <summary>
    /// 获取ShowDevice位置
    /// </summary>
    public void GetDeviceTransform()
    {
        this.SendCommand(new ShowDeviceCommand(MachineRoomManager.Instance.startShowDevice));
       
    }

    /// <summary>
    ///  导航
    /// </summary>
    /// <param name="item"></param>
    public void NavigatorServer(MachineObj item)
    {
        WayFindingManager.Instance.NavigatorServer(item);
    }
    /// <summary>
    /// 导航
    /// </summary>
    /// <param name="listItem"></param>
    public void NavigatorServer(List<MachineObj> listItem)
    {
        WayFindingManager.Instance.NavigatorServer(listItem);
    }
    /// <summary>
    ///  获取告警列表
    /// </summary>
    /// <returns></returns>
    public List<AlarmData> GetAlarmData()
    {
        // 缺少获取设备名称---备注

        if(MachineRoomManager.Instance.data.listAlarmData==null)
            SetData();
        return MachineRoomManager.Instance.data.listAlarmData;
    }
    private void  SetData()
    {
        MachineRoomManager.Instance.data.listAlarmData = new List<AlarmData>();
        for (int i = 0; i < 5;i++)
        {
            AlarmData AlarmData = new AlarmData();
            AlarmData.deviceId = i.ToString();
            AlarmData.deviceName = "设备" + i;
            AlarmData.title = "问题" + i;
            AlarmData.carryingSystem = "承载系统" + i;
            AlarmData.level = "重大告警";
            AlarmData.equipmentAlarmTime = System.DateTime.Now.ToString();
            MachineRoomManager.Instance.data.listAlarmData.Add(AlarmData);
        }
    }


}