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

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

// UI 좌측에 뒤끝의 대기능 별로 나누어놓은 카테고리 UI
public class UI_MainFunction : MonoBehaviour {

    
    [Header("Prefab")] 
    [SerializeField] private GameObject  mainFunctionButton;
    
    [Header("UI")] 
    [SerializeField] private Transform buttonParent;

    // 코드만으로 쉽게 버튼에 각 함수를 할당하기 위해 List를 이용
    private List<BaseGroup> _backendFunctionTypeList = new List<BaseGroup>();

    public void Initialize(UI_RequestUI requestUI) {
        AddButtonInList();
        InstantiateButton(requestUI);
    }

    // 생성할 버튼의 리스트를 할당하는 함수
    private void AddButtonInList() {
        _backendFunctionTypeList.Add(new OperationGroup());
        _backendFunctionTypeList.Add(new GameDataGroup());
        _backendFunctionTypeList.Add(new PlayerDataGroup());

        _backendFunctionTypeList.Add(new BMemberGroup());
        _backendFunctionTypeList.Add(new MultiCharacterGroup());

        _backendFunctionTypeList.Add(new RankGroup());
        _backendFunctionTypeList.Add(new CouponGroup());
        // _backendFunctionTypeList.Add(new PushGroup());
        _backendFunctionTypeList.Add(new GameLogGroup());
        _backendFunctionTypeList.Add(new ChartGroup());
        _backendFunctionTypeList.Add(new ProbabilityGroup());
        // _backendFunctionTypeList.Add(new ReceiptGroup());
        // _backendFunctionTypeList.Add(new GameCashGroup());
        _backendFunctionTypeList.Add(new UserSearchGroup());
        _backendFunctionTypeList.Add(new RandomInfoGroup());
        _backendFunctionTypeList.Add(new FriendGroup());
        _backendFunctionTypeList.Add(new UPostGroup());
        _backendFunctionTypeList.Add(new MessageGroup());
        _backendFunctionTypeList.Add(new GuildGroup());
        _backendFunctionTypeList.Add(new NotificationGroup());
        _backendFunctionTypeList.Add(new UtilsGroup());
    }
    
    // List에 할당된 뒤끝 기능으로 버튼을 생성하는 함수
    private void InstantiateButton(UI_RequestUI requestUI) {
        foreach (var functionType in _backendFunctionTypeList) {
            
            functionType.Initialize(requestUI);
            
            var button = Instantiate(mainFunctionButton, buttonParent, true);
            button.transform.localScale = new Vector3(1, 1, 1);
            button.transform.localPosition = new Vector3(0, 0, 0);
            button.GetComponent<UI_MainFunctionButton>().Initialize(functionType);
        }
    }
}