using System;
using Cute;
using Wizard.DeckCardEdit;

namespace Wizard;

public static class InCompleteDeckDecideDialog
{
	private const int DIALOG_PANEL_DEPTH = 100;

	public static void Create(DialogBase dialogDeckList, DeckData deck, ConventionDeckList conventionDeckList = null, bool canUseNonPossessionCard = false, Action<UIManager.ViewScene> unusableDeckChangeViewSceneAction = null)
	{
		DeckData.UnusableReason reason;
		if (deck.IsNoCard())
		{
			Action onStartChangeViewScene = delegate
			{
				dialogDeckList.CloseWithoutSelect();
			};
			DeckCreateMenuUI.ShowDeckCreateMenu(deck, conventionDeckList, onStartChangeViewScene);
		}
		else if (!deck.IsUsable(out reason, canUseNonPossessionCard))
		{
			CreateUnusableDeckDialog(deck, conventionDeckList, reason, unusableDeckChangeViewSceneAction, dialogDeckList);
		}
	}

	private static void CreateUnusableDeckDialog(DeckData deck, ConventionDeckList conventionDeckList, DeckData.UnusableReason unusableReason, Action<UIManager.ViewScene> changeViewSceneAction, DialogBase dialogDeckList)
	{
		if (unusableReason == DeckData.UnusableReason.MaintenanceCard && deck.IsRentalDeck)
		{
			DialogBase dialogBase = UIManager.GetInstance().CreateConfirmationDialog(Data.SystemText.Get("Story_0060"));
			dialogBase.SetButtonLayout(DialogBase.ButtonLayout.CloseBtn);
			dialogBase.SetTitleLabel(Data.SystemText.Get("System_0022"));
			dialogBase.SetPanelDepth(100);
			return;
		}
		(string, string) textsUnusableDeckDialog = GetTextsUnusableDeckDialog(unusableReason);
		DialogBase dialogBase2 = UIManager.GetInstance().CreateDialogClose();
		dialogBase2.SetTitleLabel(textsUnusableDeckDialog.Item1);
		dialogBase2.SetText(textsUnusableDeckDialog.Item2);
		dialogBase2.SetButtonLayout(DialogBase.ButtonLayout.BlueBtn_CancelBtn);
		dialogBase2.SetButtonText(Data.SystemText.Get("Dia_DeckSelect_002_Button"));
		dialogBase2.onPushButton1 = delegate
		{
			if (Data.MaintenanceCodeList.Contains(NetworkDefine.MAINTENANCE_TYPE.DECK_MAINTENANCE))
			{
				Toolbox.NetworkManager.NetworkUI.OpenEachFunctionMaintenancePopUp(2019);
			}
			else
			{
				DeckCardEditUI.SetDeckEditParameter(deck, conventionDeckList);
				dialogDeckList.CloseWithoutSelect();
				if (changeViewSceneAction != null)
				{
					changeViewSceneAction(UIManager.ViewScene.DeckCardEdit);
				}
				else
				{
					UIManager.ChangeViewSceneParam param = new UIManager.ChangeViewSceneParam
					{
						IsUpdateFooterMenuTexture = true
					};
					UIManager.GetInstance().ChangeViewScene(UIManager.ViewScene.DeckCardEdit, param);
				}
			}
		};
		dialogBase2.ClickSe_Btn1 = Se.TYPE.SYS_BTN_DECIDE_TRANS;
		dialogBase2.SetPanelDepth(100);
	}

	private static (string title, string body) GetTextsUnusableDeckDialog(DeckData.UnusableReason unusableReason)
	{
		string item = string.Empty;
		string item2 = string.Empty;
		switch (unusableReason)
		{
		case DeckData.UnusableReason.MaintenanceCard:
			item = Data.SystemText.Get("System_0022");
			item2 = Data.SystemText.Get("System_0039");
			break;
		case DeckData.UnusableReason.FormatRestrictCard:
			item = Data.SystemText.Get("Dia_DeckSelect_004_Title");
			item2 = Data.SystemText.Get("Card_0192");
			break;
		case DeckData.UnusableReason.TooLittleCards:
			item = Data.SystemText.Get("Dia_DeckSelect_002_Title");
			item2 = Data.SystemText.Get("Card_0069");
			break;
		case DeckData.UnusableReason.TooMuchCards:
			item = Data.SystemText.Get("Dia_DeckSelect_003_Title");
			item2 = Data.SystemText.Get("Card_0140");
			break;
		case DeckData.UnusableReason.NonPossessionCard:
			item = Data.SystemText.Get("Dia_DeckSelect_004_Title");
			item2 = Data.SystemText.Get("Card_0254");
			break;
		case DeckData.UnusableReason.ShortageMainClassCards:
			item = Data.SystemText.Get("Dia_DeckSelect_005_Title");
			item2 = Data.SystemText.Get("Card_0289");
			break;
		case DeckData.UnusableReason.ShortageSubClassCards:
			item = Data.SystemText.Get("Dia_DeckSelect_006_Title");
			item2 = Data.SystemText.Get("Card_0290");
			break;
		case DeckData.UnusableReason.ShortageBothClassCards:
			item = Data.SystemText.Get("Dia_DeckSelect_007_Title");
			item2 = Data.SystemText.Get("Card_0291");
			break;
		case DeckData.UnusableReason.Unknown:
			Debug.LogError("unknown deck unusable reason.");
			break;
		}
		return (title: item, body: item2);
	}
}
