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

using System;
using System.Collections.Generic;
using BackEnd;
using BackEnd.MultiSettings;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class ConfigUI : MonoBehaviour {

    [SerializeField] private TMP_InputField clientAppIdInputField;
    [SerializeField] private TMP_InputField signatureKeyInputField;
    [SerializeField] private Button confirmButton;
    [SerializeField] private Button closeButton;

    [SerializeField] private Transform multiCharacterListGroup;
    [SerializeField] private GameObject multiCharacterButtonObject;

    
    public void Initialize() {
        confirmButton.onClick.AddListener(ConfirmButton);
        closeButton.onClick.AddListener(CloseUI);

        List<MultiProject> multiProjectList = MultiSettingManager.theBackendMultiSettings.projectList;
        
        for (int i = 0; i < multiProjectList.Count; i++) {
            var obj = Instantiate(multiCharacterButtonObject, multiCharacterListGroup, true);
            obj.transform.localScale = new Vector3(1, 1, 1);
            int index = i;
            obj.GetComponentInChildren<TMP_Text>().text = multiProjectList[i].projectName;
            obj.GetComponent<Button>().onClick.AddListener(() => {
                string clientAppId = MultiSettingManager.theBackendMultiSettings.projectList[index].clientAppId;
                string signatureKey = MultiSettingManager.theBackendMultiSettings.projectList[index].signatureKey;

                SetClientAndSignature(clientAppId, signatureKey);
            });
        }
        
        gameObject.SetActive(false);
    }

    private void SetClientAndSignature(string clientAppId, string signatureKey) {
        clientAppIdInputField.text = clientAppId;
        signatureKeyInputField.text = signatureKey;
    }
    
    public void Reset() {
        clientAppIdInputField.text = string.Empty;
        signatureKeyInputField.text = string.Empty;
    }

    private void ConfirmButton() {

        BackendCustomSetting backendCustomSetting = new BackendCustomSetting();
        
        backendCustomSetting.clientAppID = clientAppIdInputField.text;
        backendCustomSetting.signatureKey = signatureKeyInputField.text;
        backendCustomSetting.useAsyncPoll = true;
        
        var bro = Backend.Initialize(backendCustomSetting);
        
        if (bro.IsSuccess()) {
            AlertUI.Instance.OpenUI("초기화가 성공했습니다!");
            CloseUI();
        } else {
            string error = "초기화 중 에러가 발생했습니다!\n" + bro.ToString();
            AlertUI.Instance.OpenUI(error);
        }
    }

    public void OpenUI() {
        gameObject.SetActive(true);

    }

    private void CloseUI() {
        if (Backend.IsInitialized == false) {
            AlertUI.Instance.OpenUI("초기화가 아직 진행되지 않았습니다!");
            return;
        }
        
        gameObject.SetActive(false);
    }
    
}