// Copyright 2013-2022 AFI,Inc. All rights reserved

using System;
using System.Threading.Tasks;
using BackEnd;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class LoginUI : MonoBehaviour {

    [Header("세팅")]
    [SerializeField] private Button configButton;

    [Header("로그인")]
    [SerializeField] private TMP_InputField idField;
    [SerializeField] private Button loginButton;

    [Header("유저 정보")] [SerializeField] private TMP_InputField inDateField;
    [SerializeField] private TMP_InputField nickNameField;
    [SerializeField] private TMP_InputField uidField;

    private static bool _isLoginActive = false;
    private Action _loginAction;
    
    public void Initialize() {
        configButton.onClick.AddListener(UIManager.Instance.OpenConfig);
        loginButton.onClick.AddListener(Login);
        _loginAction = () => {
            inDateField.text = Backend.UserInDate;
            nickNameField.text = Backend.UserNickName;
            uidField.text = Backend.UID;
        };
    }

    void Update() {
        if (_isLoginActive) {
            _isLoginActive = false;
            try {
                _loginAction.Invoke();
            } catch (Exception e) {
                AlertUI.Instance.OpenUI("로그인 중 에러가 발생했습니다.", e);
            }
            
            LoadingUI.Instance.CloseUI();
        }
    }
    
    private async void Login() {
        
        string id = idField.text;
        LoadingUI.Instance.OpenUI();

        await Task.Run(() => {
            var bro = Backend.BMember.CustomLogin(id, id);
            if (bro.IsSuccess()) {
                UpdateUserData();
                return;
            }
            
            if (bro.GetStatusCode() == "401" && bro.GetMessage() == "bad customId") {
                AlertUI.Instance.OpenUI("로그인 중 에러가 발생했습니다.",bro);
                return;
            }

            bro = Backend.BMember.CustomSignUp(id, id);
            if (bro.IsSuccess() == false) {
                AlertUI.Instance.OpenUI("회원가입 중 에러가 발생했습니다.",bro);
                return;
            }

            bro = Backend.BMember.UpdateNickname(id);
            if (bro.IsSuccess() == false) {
                AlertUI.Instance.OpenUI("닉네임 생성 중 에러가 발생했습니다.\n회원가입은 성공했습니다.",bro);
            }

            UpdateUserData();
        });
    }

     public static void UpdateUserData() {
        _isLoginActive = true;
    }
}