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

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

// 뒤끝 대기능에 속한 세부 기능들을 모아놓은 함수
public class UI_SubFunction : MonoBehaviour {

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

    private List<UI_SubFunctionButton>   _subButtonList = new List<UI_SubFunctionButton>();
    private int                          _currentSubButtonIndex = 0;
    
    // 버튼을 생성하고 List에 할당하는 함수
    private void CreateSubFunction() {
        var button = Instantiate(subFunctionButton, buttonParent, true);
        button.transform.localScale = new Vector3(1, 1, 1);
        button.transform.localPosition = new Vector3(0, 0, 0);

        _subButtonList.Add(button.GetComponent<UI_SubFunctionButton>());
    }

    // BaseGroup을 가진 뒤끝 기능에서 호출하는 함수(호출은 UIManager.Instance.AddSunFunction으로 한다)
    public void AddSubFunction(string buttonName, Action action) {
        if (_subButtonList.Count <= _currentSubButtonIndex) {
            // 현재 만들어진 갯수보다 더 많이 생성을 요청하면 하나씩 늘려간다.
            // 줄이는 것은 구현되어 있지 않다.
            CreateSubFunction();
        }
        
        _subButtonList[_currentSubButtonIndex].Initialize(buttonName, action);
        _subButtonList[_currentSubButtonIndex].gameObject.SetActive(true);

        _currentSubButtonIndex++;
    }

    // 모든 버튼을 리셋하고 비활성화 시키는 함수
    public void Reset() {
        for (int i = 0; i < _currentSubButtonIndex; i++) {
            _subButtonList[i].Reset();
            _subButtonList[i].gameObject.SetActive(false);
        }
        _currentSubButtonIndex = 0;
    }
    
}