﻿using Com.Nhn.Gameanvil.Sample.Template.Chat.Protocol;
using GameAnvil;
using GameAnvil.Defines;
using GameAnvil.User;
using UnityEngine;
using UnityEngine.UI;

namespace GameAnvilSampleForTemplate
{
    public class ChatRoom : MonoBehaviour
    {
        [SerializeField]
        Text textTitle = null;

        [SerializeField]
        Button buttonLeave = null;

        [SerializeField]
        Button buttonSend = null;

        [SerializeField]
        InputField inputFieldMessage = null;

        [SerializeField]
        MessageContainer messageContainer = null;

        [SerializeField]
        Lobby lobby = null;

        UserAgent userAgent = null;

        private void Start()
        {
            buttonLeave.onClick.AddListener(() => { OnClickLeave(); });
            buttonSend.onClick.AddListener(() => { OnClickSend(); });

            userAgent.AddListener<ChatMessageToC>((sendUserAgent, chatMessageToC) => {
                messageContainer.addElement(chatMessageToC.Message);
            });
        }

        public void OnEnter(UserAgent userAgent, int roomId)
        {
            this.userAgent = userAgent;
            textTitle.text = string.Format("chatRoom : {0}", roomId);
            SwitchFlag(true);
        }

        public void OnExit()
        {
            SwitchFlag(false);
        }

        void SwitchFlag(bool flag)
        {
            gameObject.SetActive(flag);
            buttonLeave.enabled = flag;
            buttonSend.enabled = flag;
        }

        void OnClickLeave()
        {
            buttonLeave.enabled = false;
            userAgent.LeaveRoom((UserAgent userAgent, ResultCodeLeaveRoom result, bool force, int roomId, Payload payload) => {
                if (ResultCodeLeaveRoom.LEAVE_ROOM_SUCCESS == result)
                {
                    this.OnExit();
                    lobby.OnEnter(userAgent);
                }
            });
        }

        void OnClickSend()
        {
            if (!string.IsNullOrEmpty(inputFieldMessage.text))
            {
                buttonSend.enabled = false;
                ChatMessageToS chatMessageToS = new ChatMessageToS();
                chatMessageToS.Message = inputFieldMessage.text;
                if (userAgent.Send(chatMessageToS))
                {
                    inputFieldMessage.text = string.Empty;
                }
                buttonSend.enabled = true;
            }
        }
    }
}