using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
using Games.GlobeDefine;
using GCGame.Table;
using GCGame;
using System.Collections.Generic;

public class PlayHelpMessageRoot : UIControllerBase<PlayHelpMessageRoot>
{
    #region start

    public static event UnityAction CloseEvent = null;

    public static void ShowHelpMessage(int messageID, bool SendServer = false)
    {
        UIManager.ShowUI(UIInfo.PlayHelpMessage, ShowMessageFinish, messageID);
        if (SendServer)
            CloseEvent = SendToServer;
        else
            CloseEvent = null;
    }

    public static void SendToServer()
    {
        //剧情结束后通知一下服务器
        ReqResumeCopy req = new ReqResumeCopy();
        req.nilparam = 1;
        req.SendMsg();
    }

    public static void ShowMessageFinish(bool bSuccess, object param)
    {
        int messageID = (int)param;

        PlayHelpMessageRoot.Instance().ShowMessageInner(messageID);
    }

    public UIContainerBase m_Container;
    public Text Title;
    public RawImage m_DesTexure;
    public Text m_DesText;
    public GameObject m_DescBack;
    private float Duration = -1;
    List<string> m_ShowList = new List<string>();

    public void Awake()
    {
        SetInstance(this);
    }

    public void OnDestory()
    {
        SetInstance(null);
    }

    public void CloseWindow()
    {
        UIManager.CloseUI(UIInfo.PlayHelpMessage);
        if(CloseEvent!=null)
        {
            CloseEvent.Invoke();
            CloseEvent = null;
        }
    }

    #endregion

    #region

    public void Update()
    {
        if (Duration <= -1)
            return;
        if(Duration-Time.realtimeSinceStartup<=0)
        {
            CloseWindow();
            Duration = -1;
        }
    }

    public void ShowMessageInner(int messageID)
    {
        var tabMessage = TableManager.GetPlayHelpMessageByID(messageID, 0);
        if (tabMessage == null)
            return;
        Title.text = tabMessage.Title;
        if(tabMessage.Duration>0)
        {
            Duration = Time.realtimeSinceStartup + tabMessage.Duration;
        }
        else
        {
            Duration = -1;
        }
        m_ShowList.Clear();
        for (var i =0;i<tabMessage.getMessageCount();i++)
        {
            string desc = tabMessage.GetMessagebyIndex(i);
            string raw = tabMessage.GetTexturebyIndex(i);
            if (raw == "-1" || raw == "" || raw.Contains("ui")==false)
                continue;
            m_ShowList.Add(string.Format(desc + "[-]" + raw));
        }
        if (m_ShowList.Count <= 0)
        {
            CloseWindow();
            return;
        }
            
        m_Index = 0;
        ShowDesc();
        //m_Container.InitContentItem(list);
    }

    public void ShowDesc()
    {
        if (m_ShowList.Count <= 0)
            return;
        if (m_ShowList[m_Index].Contains("[-]") == false)
            return;
        string[] lists = m_ShowList[m_Index].Split('-');
        if (lists.Length < 2)
            return;
        m_DesText.text = lists[0].Remove(lists[0].Length - 1, 1);
        bool isShow = (m_DesText.text != "" && m_DesText.text != "-1");
        m_DesText.gameObject.SetActive(isShow);
        m_DescBack.SetActive(isShow);
        string imagePath = lists[1].Remove(0, 1);
        string name = System.IO.Path.GetFileNameWithoutExtension(imagePath);
        LoadAssetBundle.Instance.SetRawTexture(m_DesTexure, name, imagePath);
    }

    int m_Index = 0;
    public void Next_Click()
    {
        m_Index++;
        if (m_Index >= m_ShowList.Count)
            m_Index = 0;
        ShowDesc();
    }

    public void Last_Click()
    {
        m_Index--;
        if (m_Index < 0)
            m_Index = m_ShowList.Count - 1;
        ShowDesc();
    }

    #endregion
}