using System;
using System.Collections;
using System.Collections.Generic;
using Cute;
using UnityEngine;
using Wizard;
using Wizard.Dialog.Setting;
using Wizard.RoomMatch;

public class DeckDecisionUI : MonoBehaviour
{
	[SerializeField]
	private UILabel _textForOneLine;

	[SerializeField]
	private UILabel _descTextLabel;

	[SerializeField]
	private UILabel _deckNameTextLabel;

	[SerializeField]
	private ItemToggle m_simpleStageToggle;

	[SerializeField]
	private GameObject _uiCardListPrefab;

	[SerializeField]
	private GameObject _cardDetailPrefab;

	[SerializeField]
	private UILabel _optionLabel;

	protected List<string> _loadCardAssetList;

	private bool _textSetEnd;

	protected static int DetailLayer;

	protected const float CARD_DETAIL_Z = -300f;

	private ConventionDeckList conventionDeckList;

	public bool IsCanShowQRCode = true;

	private IFormatBehavior _formatBehavior;

	public DeckData DeckData { get; private set; }

	public string DeckName { get; set; }

	public UILabel OptionLabel => _optionLabel;

	public Action<UICardList> CardListCustomize { get; set; }

	protected CardDetailUI CardDetail { get; set; }

	protected UICardList UiCardList { get; set; }

	public Action<CardDetailUI> CardDetailCustomize { get; set; }

	public bool IsShowSimpleStageOption { get; set; }

	public void SetDeckData(DeckData deck, ConventionDeckList deckList)
	{
		DeckData = deck;
		conventionDeckList = deckList;
		_formatBehavior = FormatBehaviorManager.Create(deck.Format, deckList);
	}

	public virtual void Start()
	{
		DetailLayer = LayerMask.NameToLayer("MyPage");
		UIWidget component = GetComponent<UIWidget>();
		if (!_textSetEnd)
		{
			_descTextLabel.text = Data.SystemText.Get("Card_0006");
			_deckNameTextLabel.text = Data.SystemText.Get("Card_0299", DeckName);
			SetTextLabelesState(string.IsNullOrEmpty(_descTextLabel.text), string.IsNullOrEmpty(_deckNameTextLabel.text));
		}
		if (IsShowSimpleStageOption)
		{
			SettingToggle_SimpleStage();
			component.pivot = UIWidget.Pivot.Center;
		}
		else
		{
			m_simpleStageToggle.gameObject.SetActive(value: false);
			component.pivot = UIWidget.Pivot.Bottom;
		}
	}

	public void SetText(string descText, string cardDeckText)
	{
		_textForOneLine.text = descText;
		_descTextLabel.text = descText;
		_deckNameTextLabel.text = cardDeckText;
		SetTextLabelesState(string.IsNullOrEmpty(descText), string.IsNullOrEmpty(cardDeckText));
		_textSetEnd = true;
	}

	protected void OnDestroy()
	{
		if (_loadCardAssetList != null)
		{
			Toolbox.ResourcesManager.RemoveAssetGroup(_loadCardAssetList);
			_loadCardAssetList = null;
		}
		if (UiCardList != null)
		{
			UnityEngine.Object.Destroy(UiCardList.gameObject);
			UiCardList = null;
		}
		if (CardDetail != null)
		{
			UnityEngine.Object.Destroy(CardDetail.gameObject);
			CardDetail = null;
		}
	}

	protected ItemToggle SettingToggle_SimpleStage(bool isSperatorUse = true)
	{
		SystemText systemText = Data.SystemText;
		ItemToggle item = m_simpleStageToggle;
		item.SetTitleLabel(systemText.Get("OtherConfig_0022"));
		item.SetValue(PlayerPrefsWrapper.GetBool(PlayerPrefsWrapper.SIMPLE_STAGE));
		item.AddChangeCallback(delegate
		{
			bool value = item.GetValue();
			PlayerPrefsWrapper.SetBool(PlayerPrefsWrapper.SIMPLE_STAGE, value);
		});
		if (isSperatorUse)
		{
			item.SetActive_SeparatorLine(isActive: true);
		}
		return item;
	}

	public void OnClickCreateCardList()
	{
		CheckTimeSlipRotationPeriodTask task = new CheckTimeSlipRotationPeriodTask();
		StartCoroutine(Toolbox.NetworkManager.Connect(task, delegate
		{
			UIManager.GetInstance().createInSceneCenterLoading();
			if (CardDetail == null)
			{
				CardDetail = UnityEngine.Object.Instantiate(_cardDetailPrefab).GetComponent<CardDetailUI>();
				CardDetail.transform.parent = base.transform.parent.parent;
				CardDetail.transform.localPosition = new Vector3(0f, 0f, -300f);
				CardDetail.transform.localScale = Vector3.one;
				CardDetail.Initialize(DetailLayer, _formatBehavior.CardMasterId, _formatBehavior);
				CardDetail.IsShowFlavorTextButton = true;
				CardDetail.IsShowVoiceButton = true;
				CardDetail.IsShowEvolutionButton = true;
				CardDetail.IsCardTextDialogLayerSet = false;
				CardDetailCustomize.Call(CardDetail);
				UIManager.GetInstance().SetLayerRecursive(CardDetail.gameObject.transform, DetailLayer);
			}
			if (UiCardList == null)
			{
				bool in_DetailCameraUse = false;
				UiCardList = UnityEngine.Object.Instantiate(_uiCardListPrefab).GetComponent<UICardList>();
				UIManager.ViewScene currentScene = UIManager.GetInstance().GetCurrentScene();
				if (currentScene != UIManager.ViewScene.MyPage && currentScene != UIManager.ViewScene.QuestSelectionPage)
				{
					in_DetailCameraUse = true;
				}
				else
				{
					UiCardList.SetCamera(UIManager.GetInstance().MyPageUICameraObj.GetComponent<Camera>());
				}
				int in_MaxCardNum = 40;
				if (DeckData.Format == Format.Windfall)
				{
					in_MaxCardNum = 35;
				}
				UiCardList.Init(base.transform.parent.parent.gameObject, CardDetail, null, DeckViewClose, LayerMask.LayerToName(DetailLayer), in_DetailCameraUse, null, in_MaxCardNum);
				UiCardList.SetActive(in_Active: false);
			}
			CardListCustomize.Call(UiCardList);
			CardDetail.gameObject.SetActive(value: false);
			StartCoroutine(CardLoadCoroutine(DeckData));
		}));
	}

	private IEnumerator CardLoadCoroutine(DeckData inDeckData)
	{
		RoomBase.StartDialogLoading();
		IList<int> cardIdList = inDeckData.GetCardIdList();
		inDeckData.GetDeckName();
		UiCardList.RemoveData();
		UiCardList._loadingEnd = false;
		_loadCardAssetList = UiCardList.GetLoadFileList(cardIdList as List<int>);
		yield return StartCoroutine(Toolbox.ResourcesManager.LoadAssetGroupAsync(_loadCardAssetList, null));
		UiCardList.SetDeck(inDeckData, conventionDeckList);
		yield return null;
		DialogSetDisp(inDisp: false);
		if (IsCanShowQRCode)
		{
			UiCardList.SetQRSmallTexture();
		}
		UiCardList.SetActive(in_Active: true);
		UIManager.GetInstance().closeInSceneCenterLoading();
		UiCardList._loadingEnd = true;
		RoomBase.FinishDiloagLoading();
	}

	protected void DeckViewClose()
	{
		UiCardList.SetActive(in_Active: false);
		if (_loadCardAssetList != null)
		{
			Toolbox.ResourcesManager.RemoveAssetGroup(_loadCardAssetList);
			_loadCardAssetList = null;
		}
		DialogSetDisp(inDisp: true);
		UnityEngine.Object.Destroy(UiCardList.gameObject);
		UnityEngine.Object.Destroy(CardDetail.gameObject);
		UiCardList = null;
		CardDetail = null;
	}

	protected void DialogSetDisp(bool inDisp)
	{
		UIManager.GetInstance().ActiveChangeDialogAll(inDisp);
	}

	private void SetTextLabelesState(bool noDescText, bool noDeckNameText)
	{
		if (noDescText && noDeckNameText)
		{
			_textForOneLine.gameObject.SetActive(value: false);
			_descTextLabel.gameObject.SetActive(value: false);
			_deckNameTextLabel.gameObject.SetActive(value: false);
		}
		else if (noDeckNameText)
		{
			_descTextLabel.gameObject.SetActive(value: false);
			_deckNameTextLabel.gameObject.SetActive(value: false);
		}
		else
		{
			_textForOneLine.gameObject.SetActive(value: false);
		}
	}
}
