using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections;
using System;

public class ChatVoiceButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler
{
    private bool _IsPointExit = false;
    public GC_CHAT.CHATTYPE _DefaultChatChannel = GC_CHAT.CHATTYPE.CHAT_TYPE_INVALID;
    public GameObject _HoldGO;
    public GameObject _ReleaseGO;

    private const float _CHAT_VOICE_LIMIT = 10.0f;
    private float _ChatVoiceStart = 0;


    public void Update()
    {
        if (_ChatVoiceStart < 0)
            return;

        if (Time.realtimeSinceStartup - _ChatVoiceStart >= _CHAT_VOICE_LIMIT)
        {
            PointUP();
            _ChatVoiceStart = -1;
        }
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        Debug.Log("OnPointerDown");
        //if (_DefaultChatChannel == GC_CHAT.CHATTYPE.CHAT_TYPE_INVALID)
        {
            if (ChatInfoLogic.Instance() && ChatInfoLogic.Instance().gameObject.activeSelf)
            {
                _DefaultChatChannel = (GC_CHAT.CHATTYPE)ChatInfoLogic.Instance().GetCurChannelType();
            }
            else if (FriendAndMailRoot.Instance() && FriendAndMailRoot.Instance().gameObject.activeSelf)
            {
                _DefaultChatChannel = GC_CHAT.CHATTYPE.CHAT_TYPE_FRIEND;
            }
        }

        if (!ChatInputLogic.IsCanChat((int)_DefaultChatChannel, true))
            return;

        //if ((int)_DefaultChatChannel == (int)CG_CHAT.CHATTYPE.CHAT_TYPE_GUILD)
        //{
        //    if (!GameManager.gameManager.PlayerDataPool.IsHaveGuild())
        //    {
        //        GUIData.AddNotifyData(GCGame.Table.StrDictionary.GetClientDictionaryString("#{4909}"));
        //        return;
        //    }
        //}
        //else if ((int)_DefaultChatChannel == (int)CG_CHAT.CHATTYPE.CHAT_TYPE_TEAM)
        //{
        //    if (!GameManager.gameManager.PlayerDataPool.IsHaveTeam())
        //    {
        //        GUIData.AddNotifyData(GCGame.Table.StrDictionary.GetClientDictionaryString("#{4910}"));
        //        return;
        //    }
        //}

        bool isInputStart = ChatVoiceInputLogic.InputVoice(_DefaultChatChannel);
        if (isInputStart)
        {
            _IsPointExit = false;

            if (_HoldGO != null)
            {
                _HoldGO.SetActive(true);
            }
            if (_ReleaseGO != null)
            {
                _ReleaseGO.SetActive(false);
            }

            _ChatVoiceStart = Time.realtimeSinceStartup;
        }
        else
        {
            _IsPointExit = true;
            PointUP();
        }
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        _IsPointExit = true;
        ChatVoiceInputLogic.CancelVoiceSlider();
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        PointUP();
    }

    private void PointUP()
    {
        if (_IsPointExit)
        {
            ChatVoiceInputLogic.CancelVoiceKeyUp();
        }
        else
        {
            ChatVoiceInputLogic.StopVoice();
        }

        if (_HoldGO != null)
        {
            _HoldGO.SetActive(false);
        }
        if (_ReleaseGO != null)
        {
            _ReleaseGO.SetActive(true);
        }
    }
}