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

public class GiftWordsRoot : MonoBehaviour
{
    private Dictionary<int, int> m_dialogs = new Dictionary<int, int>()
    {
        {1,5129 },
        {2,5130 },
        {3,5131 },
    };


    public GameObject cloneBnt;
    public InputField inputDialog;

    int m_selectIndex = 1;
    GameItem m_gameItem;


    void Awake()
    {
        Hashtable add = new Hashtable();
        add["name"] = "UseItemDialog";
        Games.Events.MessageEventCallBack call = OnOpen;
        add["callFun"] = call;
        Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.OpenUseItemWithDialogWnd, add);

        Hashtable add1 = new Hashtable();
        add1["name"] = "SendChatTo";
        Games.Events.MessageEventCallBack call1 = SendChatTo;
        add1["callFun"] = call1;
        Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.SendMailInfoChatLink, add1);
    }

    public void OnOpen(Hashtable addparam, Hashtable sendparam)
    {
        if (sendparam == null)
            return;
        if (sendparam.ContainsKey("item") == false)
            return;
        GameItem item = (GameItem)sendparam["item"];
        if(item==null)
        {
            UIManager.CloseUI(UIInfo.GiftWordsRoot);
            return;
        }
        m_gameItem = item;
        int i = 0;
        int firstkey = 0;
        foreach (var dialog in m_dialogs)
        {
            if (i == 0)
                firstkey = dialog.Key;
            i++;
            ClonedialogBtn(dialog.Key);
        }
        SelectDialog(firstkey);
    }

    void OnDestroy()
    {
        Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.OpenUseItemWithDialogWnd, "UseItemDialog");
        Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.SendMailInfoChatLink, "SendChatTo");
    }

    void ClonedialogBtn(int index)
    {
        if (cloneBnt == null)
            return;
        GameObject btnObj = Object.Instantiate(cloneBnt) as GameObject;
        if (btnObj == null)
            return;
        btnObj.SetActive(true);
        btnObj.transform.parent = cloneBnt.transform.parent;
        btnObj.transform.localPosition = Vector3.zero;
        btnObj.transform.localScale = cloneBnt.transform.localScale;

        Text ms = btnObj.GetComponentInChildren<Text>();
        if(ms!=null)
        {
            Tab_StrDictionary pGoodNameDictionary = TableManager.GetStrDictionaryByID(m_dialogs[index], 0);
            if (pGoodNameDictionary != null)
            {
                ms.text = pGoodNameDictionary.StrDictionary;
            }
        }
        Button btn = btnObj.GetComponentInChildren<Button>();
        if(btn != null)
        {
            btn.onClick.AddListener(delegate ()
            {
                SelectDialog(index);
            });
        }
    }

    public void SelectDialog(int index)
    {
        if (m_dialogs.ContainsKey(index) == false)
            return;
        Tab_StrDictionary pGoodNameDictionary = TableManager.GetStrDictionaryByID(m_dialogs[index], 0);
        if (pGoodNameDictionary != null)
        {
            inputDialog.text = pGoodNameDictionary.StrDictionary;
        }
    }

    public void AddFriend_Click()
    {
        if (m_gameItem == null)
            return;
        Singleton<ObjManager>.GetInstance().MainPlayer.ReqAddFriend(m_gameItem.SignDataID);
    }

    public void Close_Click()
    {
        UIManager.CloseUI(UIInfo.GiftWordsRoot);
    }

    public void Send_Click()
    {
        if (m_gameItem == null)
            return;
        if(GameManager.gameManager.PlayerDataPool.FriendList.IsExist(m_gameItem.SignDataID)==false)
        {
            GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{5215}"));
            return;
        }
        if (false == m_gameItem.IsMountItem())
        {
            CG_USE_ITEM useitem = (CG_USE_ITEM)PacketDistributed.CreatePacket(MessageID.PACKET_CG_USE_ITEM);
            useitem.SetItemguid(m_gameItem.Guid);
            useitem.SendPacket();
        }
    }

    public void SendChatTo(Hashtable addparam, Hashtable sendparam)
    {
        if (string.IsNullOrEmpty(inputDialog.text))
        {
            UIManager.CloseUI(UIInfo.GiftWordsRoot);
            return;
        }
        if (sendparam == null)
        {
            UIManager.CloseUI(UIInfo.GiftWordsRoot);
            return;
        }
        if (sendparam.ContainsKey("data") == false)
            return;
        GC_MAIL_INFO_CHAT_LINK packet = (GC_MAIL_INFO_CHAT_LINK)sendparam["data"];
        if (packet == null)
        {
            UIManager.CloseUI(UIInfo.GiftWordsRoot);
            return;
        }

        CG_CHAT sendChat = (CG_CHAT)PacketDistributed.CreatePacket(MessageID.PACKET_CG_CHAT);
        sendChat.Chattype = (int)CG_CHAT.CHATTYPE.CHAT_TYPE_FRIEND;

        sendChat.Chatinfo = string.Format("{0}[#5,{1},{2},{3},{4}]", inputDialog.text, packet.MailGuid, packet.ItemId, packet.ItemNum, packet.PassTime);

        sendChat.Receiverguid = m_gameItem.SignDataID;
        Relation relation = GameManager.gameManager.PlayerDataPool.FriendList.RelationDataList[m_gameItem.SignDataID];
        if (relation != null)
        {
            sendChat.Receivername = relation.Name;
        }
        sendChat.Linktype = (int)ChatLinkBase.ChatLinkType.TeamAward;
        sendChat.SendPacket();
        UIManager.CloseUI(UIInfo.GiftWordsRoot);
    }
}