﻿using GameAnvil.Defines;
using GameAnvil.User;
using UnityEngine;

namespace GameAnvilSampleForTemplate {
    public class ServiceLogin : MonoBehaviour {
        [SerializeField]
        UnityEngine.UI.InputField inputFieldServiceId = null;
        [SerializeField]
        UnityEngine.UI.InputField inputFieldUserType = null;
        [SerializeField]
        UnityEngine.UI.InputField inputFieldSubID = null;

        int getInputSubID {
            get {
                int subId = 0;
                int.TryParse(inputFieldSubID.text, out subId);
                return subId;
            }
        }

        [SerializeField]
        UnityEngine.UI.Button buttonLogin = null;

        [SerializeField]
        Lobby lobby = null;

        private void Start() {
            inputFieldServiceId.text = Common.serviceName;
            inputFieldUserType.text = Common.userType;

            buttonLogin.onClick.AddListener(() => { OnClick_Login(); });
        }

        public void Reset() {
            this.gameObject.SetActive(false);
            SetButtonsInteractable(true);
        }

        public void OnEnter() {
            SetButtonsInteractable(true);
            this.gameObject.SetActive(true);
        }

        UserAgent playUserAgent {
            get {
                UserAgent userAgent = ConnectHandler.getInstance().GetUserAgent(inputFieldServiceId.text, getInputSubID);
                if (userAgent == null) {
                    userAgent = ConnectHandler.getInstance().CreateUserAgent(inputFieldServiceId.text, getInputSubID);
                }
                return userAgent;
            }
        }

        void OnClick_Login() {
            Debug.Log("OnClick_Login");
            SetButtonsInteractable(false);
            // 서비스에 로그인 시도.
            playUserAgent.Login(inputFieldUserType.text, Common.channelId, null,
                (UserAgent userAgent, ResultCodeLogin result, UserAgent.LoginInfo loginInfo) => {
                    Debug.Log(result);

                    // 성공시 다음 단계.
                    if (result == ResultCodeLogin.LOGIN_SUCCESS) {
                        OnExit();
                        lobby.OnEnter(playUserAgent);
                    } else {
                        SetButtonsInteractable(true);
                    }
                }
            );
        }

        void OnExit() {
            gameObject.SetActive(false);
        }

        void SetButtonsInteractable(bool flag) {
            buttonLogin.interactable = flag;
        }
    }
}