using AX.MessageSystem;
using SuperScrollView;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;

public class SuggestPanel : UIView
{
    public GameObject InputFiledObject;
    public LoopListView2 SuggestListView;
    public Button CloseButton;
    public Button TextButton;
    public GameObject AudioButton;
    public InputField InputField;
    private ClickEventListener listener;
    //录音机
    private AudioRecorder recorder;
    private string fileName;
    private TimeSpan time;
    private DateTime startTime;

    public override UIViewType ViewType
    {
        get
        {
            return UIViewType.Normal;
        }
    }

    private void Awake()
    {
        TextButton.onClick.AddListener(TextButtonClick);
        recorder = gameObject.AddComponent<AudioRecorder>();
        recorder.Stopped += OnRecorderStopped;
        CloseButton.onClick.AddListener(Hide);
        listener = ClickEventListener.Get(AudioButton);
        listener.SetPointerDownHandler(AudioButtonClickDown);
        listener.SetPointerUpHandler(AudioButtonClickUp);
        //作战建议初始化
        SuggestListView.InitListView(ChatManager.Instance.SuggestChatMsg.Count, OnGetSuggestItemByIndex);
    }
    /// <summary>
    /// 语音按钮弹起
    /// </summary>
    /// <param name="obj"></param>
    private void AudioButtonClickUp(GameObject obj)
    {
        recorder.StopRecorder();
    }
    /// <summary>
    /// 语音按钮按下
    /// </summary>
    /// <param name="obj"></param>
    private void AudioButtonClickDown(GameObject obj)
    {

        if (recorder.Ready)
        {
            startTime = DateTime.Now;
            recorder.StartRecorder();
        }
        else
        {
            LoadPromptWin.Instance.LoadTextPromptWindow("没有可用设备", 1f);
        }
    }
    /// <summary>
    /// 保存音频事件
    /// </summary>
    /// <param name="segment"></param>
    private void OnRecorderStopped(ArraySegment<byte> segment)
    {
        fileName = string.Format("{0}.opus", Guid.NewGuid().ToString("N"));
        string userPath = ChatManager.Instance.UserPath;
        if (!Directory.Exists(userPath))
        {
            Directory.CreateDirectory(userPath);
        }
        string filePath = Path.Combine(userPath, fileName);
        using (var filestream = new FileStream(filePath, FileMode.CreateNew))
        {
            filestream.Write(segment.Array, segment.Offset, segment.Count);
        }
        time = DateTime.Now - startTime;
        ChatManager.Instance.SendSuggestAudioMessage(fileName, time);
        // 输入框获得焦点
        InputField.ActivateInputField();
    }

    //添加本地语音
    public void AddLocalAudioData()
    {
        ChatAudioMessage msg = new ChatAudioMessage()
        {
            BattleId = 0,
            Channel = new ChatChannel(),
            ChatGroup = ChatType.SuggestChat,
            CreateTime = DateTime.Now,
            FileName = fileName,
            ID = 0,
            ReceiverId = ChatManager.Instance.FindSuggestReceiverId(),
            SenderId = CurrentUserInfo.mySelf.Id,
            ReplayFrameCount = InputManager.frameCount
        };
        ChatManager.Instance.AddSuggestMsg(msg);
        //刷新UI
        RefreshSuggestMsg();
    }
    private void TextButtonClick()
    {
        string str = InputField.text;
        InputField.text = null;
        if (!string.IsNullOrEmpty(str))
        {
            ChatManager.Instance.SendSuggestTextMessage(str);
        }
        // 输入框获得焦点
        InputField.ActivateInputField();

    }
    //添加本地信息
    public void AddLocalTextData(string str)
    {
        ChatTextMessage msg = new ChatTextMessage()
        {
            BattleId = 0,
            Channel = new ChatChannel(),
            ChatGroup = ChatType.SuggestChat,
            CreateTime = DateTime.Now,
            Data = str,
            ID = 0,
            ReceiverId = ChatManager.Instance.FindSuggestReceiverId(),
            SenderId = CurrentUserInfo.mySelf.Id,
            ReplayFrameCount = InputManager.frameCount
        };
        ChatManager.Instance.AddSuggestMsg(msg);
        //刷新UI
        RefreshSuggestMsg();
    }
    public void RefreshSuggestMsg()
    {
        SuggestListView.SetListItemCount(ChatManager.Instance.GetSuggestMsgCount(), false);
        SuggestListView.MovePanelToItemIndex(ChatManager.Instance.GetSuggestMsgCount(), 0);
    }
    public void ShowInput()
    {
        base.Show();
        //TODO 显示参谋界面
        InputFiledObject.SetActive(true);
        SuggestListView.GetComponent<RectTransform>().sizeDelta = new Vector2(406f, 315f);
        SuggestListView.ResetListView();
    }
    public void ShowNoInput()
    {
        base.Show();
        //TODO 显示指挥界面
        InputFiledObject.SetActive(false);
        SuggestListView.GetComponent<RectTransform>().sizeDelta = new Vector2(406f, 365f);
        SuggestListView.ResetListView();
    }
    //
    private void OnEnable()
    {
        //Show();
        MessageDispatcher.AddListener(MessageName.RefreshSuggestChatMsgs.ToString(), RefreshSuggestChatMsgs);
        //MessageDispatcher.AddListener(MessageName.ShowSuggestPanel.ToString(), ShowSuggestPanel);
    }
    private void OnDisable()
    {
        MessageDispatcher.RemoveListener(MessageName.RefreshSuggestChatMsgs.ToString(), RefreshSuggestChatMsgs);
        //MessageDispatcher.AddListener(MessageName.ShowSuggestPanel.ToString(), ShowSuggestPanel);
    }
    /// <summary>
    /// 显示面板
    /// </summary>
    /// <param name="obj"></param>
    //private void ShowSuggestPanel(IMessage obj)
    //{
    //    bool b = (bool)obj.Data;
    //    gameObject.SetActive(b);
    //}
    private void RefreshSuggestChatMsgs(IMessage obj)
    {
        RefreshSuggestMsg();
    }
    public override void Refresh()
    {
        base.Refresh();
        SuggestListView.SetListItemCount(ChatManager.Instance.GetSuggestMsgCount(), false);
    }
    /// <summary>
    /// 获取
    /// </summary>
    /// <param name="listView"></param>
    /// <param name="index"></param>
    /// <returns></returns>
    private LoopListViewItem2 OnGetSuggestItemByIndex(LoopListView2 listView, int index)
    {
        //获取要填充的数据
        ChatMessage itemData = ChatManager.Instance.GetSuggestMsgByIndex(index);
        LoopListViewItem2 item = null;
        if (itemData is ChatTextMessage)
        {
            item = listView.NewListViewItem("SuggestTextItem");
            SuggestTextItem itemScript = item.GetComponent<SuggestTextItem>();
            if (item.IsInitHandlerCalled == false)
            {
                item.IsInitHandlerCalled = true;
                itemScript.Init();
            }
            itemScript.SetData(itemData as ChatTextMessage, index);
        }
        else if (itemData is ChatAudioMessage)
        {
            item = listView.NewListViewItem("ChatAudioItem");
            ChatAudioItem itemScript = item.GetComponent<ChatAudioItem>();
            if (item.IsInitHandlerCalled == false)
            {
                item.IsInitHandlerCalled = true;
                itemScript.Init();
            }
            itemScript.SetData(itemData as ChatAudioMessage, index);
        }
        return item;
    }
}