using System;
using Cute;
using UnityEngine;
using Wizard.ErrorDialog;

namespace Wizard;

public static class ShopCommonUtility
{
	public enum SalesType
	{
		free,
		crystal,
		rupy,
		ticket
	}

	public const float SUPPLY_LIST_LASTLINE_MARGIN = 30f;

	private const string SPRITE_FORMAT_CLASS_COLOR = "icon_class_color_{0}";

	private const int MAX_LENGTH_VIEW_PRODUCT_NAME = 18;

	private const int MAX_LENGTH_VIEW_PRODUCT_NAME_ALPHABET = 35;

	private const string OVER_MAX_TEXT_REPLACE_CHAR = "...";

	public const string CMN_SHOP_ICON_1 = "cmn_shop_icon_1";

	public const string TEXTURE_NAME_PRE_PACK_ICON = "card_pack_{0}_icon";

	private const int ERROR_CODE_NOTFOUND_DECKCODE = 10001;

	private const int ERROR_CODE_2PICK_DECKCODE = 10005;

	private static readonly Vector3 POS_COST_LABLE_RIGHT = new Vector3(40f, -86f, 0f);

	private static readonly Vector3 POS_COST_LABLE_LEFT = new Vector3(-141f, -86f, 0f);

	private static readonly Vector3 POS_COST_LABLE_CENTER = new Vector3(-47f, -86f, 0f);

	public static void SetButtonLabelStyle(UIButton button, UILabel label)
	{
		if (button.isEnabled)
		{
			label.color = LabelDefine.TEXT_COLOR_BUTTON_ENABLE;
		}
		else
		{
			label.color = LabelDefine.TEXT_COLOR_BUTTON_DISABLE;
		}
	}

	public static bool IsHaveEnoughCost(ShopCommonSaleInfo info, SalesType costType, Action funcCrystalShortage)
	{
		switch (costType)
		{
		case SalesType.free:
			if (!info.isFree)
			{
				return false;
			}
			break;
		case SalesType.crystal:
			if (!info.costCrystal.HasValue)
			{
				return false;
			}
			if (PlayerStaticData.UserCrystalCount < info.costCrystal)
			{
				funcCrystalShortage.Call();
				return false;
			}
			break;
		case SalesType.rupy:
			if (!info.costRupy.HasValue)
			{
				return false;
			}
			if (PlayerStaticData.UserRupyCount < info.costRupy)
			{
				return false;
			}
			break;
		}
		return true;
	}

	public static DialogBase CreateBasePopupPurchaseConfirm(EventDelegate del_OkBtn)
	{
		DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
		dialogBase.SetButtonLayout(DialogBase.ButtonLayout.BlueBtn_CancelBtn);
		dialogBase.SetButtonText(Data.SystemText.Get("Shop_0082"));
		dialogBase.SetButtonDelegate(del_OkBtn);
		dialogBase.SetPanelDepth(100);
		return dialogBase;
	}

	public static DialogBase CreatePurchaseConfirmPopup(ShopCommonSaleInfo info, SalesType costType, PurchaseConfirm prefabPurchaseConfirm, Action buyApiFunc, string warningTextId = null)
	{
		DialogBase dialogBase = CreateBasePopupPurchaseConfirm(new EventDelegate(delegate
		{
			buyApiFunc.Call();
		}));
		PurchaseConfirm purchaseConfirm = UnityEngine.Object.Instantiate(prefabPurchaseConfirm);
		dialogBase.SetObj(purchaseConfirm.gameObject);
		string purchaseText = Data.SystemText.Get("Shop_0101", info.name.Replace("\n", ""));
		switch (costType)
		{
		case SalesType.crystal:
			purchaseConfirm.SetClystalConfirmDialog(info.costCrystal.Value, purchaseText, PlayerStaticData.UserCrystalCount, info.expirtyTimeInfo);
			break;
		case SalesType.rupy:
			purchaseConfirm.SetRupyConfirmDialog(info.costRupy.Value, purchaseText, PlayerStaticData.UserRupyCount);
			break;
		case SalesType.ticket:
			purchaseConfirm.SetLeaderSkinTicketConfirmDialog(info.costTicket.Value, purchaseText, info.haveTicketNum.Value, info.costTicketItemId.Value);
			break;
		}
		if (warningTextId != null)
		{
			purchaseConfirm.SetWarningTextId(warningTextId);
		}
		return dialogBase;
	}

	public static DialogBase CreateCrystalShortagePopup()
	{
		DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
		dialogBase.SetTitleLabel(Data.SystemText.Get("Shop_0092"));
		dialogBase.SetText(Data.SystemText.Get("Shop_0013"), isWrapText: true);
		dialogBase.SetButtonLayout(DialogBase.ButtonLayout.OkBtn);
		dialogBase.SetPanelDepth(100);
		return dialogBase;
	}

	public static DialogBase CreatePurchaseSuccess(string productName)
	{
		DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
		dialogBase.SetText(Data.SystemText.Get("Shop_0022", productName), isWrapText: true);
		dialogBase.SetButtonLayout(DialogBase.ButtonLayout.OkBtn);
		return dialogBase;
	}

	public static void GetRewardNames(ShopCommonRewardInfo rewardInfo, out string typeName, out string detailName)
	{
		int type = rewardInfo.Type;
		long userGoodsId = rewardInfo.UserGoodsId;
		int num = rewardInfo.Num;
		GetRewardNames(type, userGoodsId, num, out typeName, out detailName);
	}

	public static void GetRewardNames(int type, long userGoodsId, int num, out string typeName, out string detailName)
	{
		typeName = "";
		detailName = "";
		switch ((UserGoods.Type)type)
		{
		case UserGoods.Type.RedEther:
			typeName = Data.SystemText.Get("Common_0205");
			detailName = num + Data.SystemText.Get("Common_0116");
			break;
		case UserGoods.Type.Crystal:
			typeName = Data.SystemText.Get("Common_0201");
			detailName = num + Data.SystemText.Get("Common_0116");
			break;
		case UserGoods.Type.Card:
		{
			typeName = Data.SystemText.Get("Common_0204");
			CardParameter cardParameterFromId = CardMaster.GetInstance(CardMaster.CardMasterId.Default).GetCardParameterFromId((int)userGoodsId);
			detailName = cardParameterFromId.CardName + num + Data.SystemText.Get("Common_0117");
			break;
		}
		case UserGoods.Type.Sleeve:
			typeName = ((!Data.Master.SleeveMgr.Get(userGoodsId).IsPremiumSleeve) ? Data.SystemText.Get("Common_0203") : Data.SystemText.Get("Common_0160"));
			if (Data.Master.SleeveMgr.IsContainsInMaster(userGoodsId))
			{
				detailName = Data.Master.SleeveMgr.Get(userGoodsId).sleeve_name;
			}
			else
			{
				detailName = "";
			}
			break;
		case UserGoods.Type.Emblem:
			typeName = Data.SystemText.Get("Common_0145");
			if (Data.Master.EmblemMgr.IsContainsInMaster(userGoodsId))
			{
				detailName = Data.Master.EmblemMgr.Get(userGoodsId)._name;
			}
			else
			{
				detailName = "";
			}
			break;
		case UserGoods.Type.Degree:
			typeName = Data.SystemText.Get("Common_0144");
			if (Data.Master.DegreeMgr.IsContainsInMaster((int)userGoodsId))
			{
				detailName = Data.Master.DegreeMgr.Get((int)userGoodsId)._name;
			}
			else
			{
				detailName = "";
			}
			break;
		case UserGoods.Type.Rupy:
			typeName = Data.SystemText.Get("Common_0115");
			detailName = num + Data.SystemText.Get("Common_0120");
			break;
		case UserGoods.Type.Item:
		{
			string text = Data.SystemText.Get("Common_0117");
			foreach (Item item in Data.Master.ItemList)
			{
				if (item.UserGoodsId == userGoodsId)
				{
					typeName = item.name;
					text = item.unit;
				}
			}
			detailName = num + text;
			break;
		}
		case UserGoods.Type.Skin:
			typeName = Data.SystemText.Get("Common_0143");
			detailName = GameMgr.GetIns().GetDataMgr().GetCharaPrmBySkinId((int)userGoodsId)
				.chara_name;
			break;
		case UserGoods.Type.SpotCardPoint:
			typeName = Data.SystemText.Get("Common_0161");
			detailName = num + Data.SystemText.Get("Common_0162");
			break;
		case (UserGoods.Type)3:
		case UserGoods.Type.SpotCard:
			break;
		}
	}

	public static string GetRewardDetailName(ShopCommonRewardInfo rewardInfo)
	{
		int type = rewardInfo.Type;
		long userGoodsId = rewardInfo.UserGoodsId;
		int num = rewardInfo.Num;
		string typeName = null;
		string detailName = null;
		GetRewardNames(type, userGoodsId, num, out typeName, out detailName);
		return detailName;
	}

	public static string GetRewardImagePath(ShopCommonRewardInfo rewardInfo, bool isFetch = false)
	{
		int type = rewardInfo.Type;
		long userGoodsId = rewardInfo.UserGoodsId;
		string result = "";
		switch ((UserGoods.Type)type)
		{
		case UserGoods.Type.Sleeve:
		{
			long existingSleeveId = Toolbox.ResourcesManager.GetExistingSleeveId(userGoodsId);
			result = Toolbox.ResourcesManager.GetAssetTypePath(existingSleeveId.ToString(), ResourcesManager.AssetLoadPathType.SleeveTexture, isFetch);
			break;
		}
		case UserGoods.Type.Emblem:
			result = Toolbox.ResourcesManager.GetAssetTypePath(userGoodsId.ToString(), ResourcesManager.AssetLoadPathType.Emblem_M, isFetch);
			break;
		}
		return result;
	}

	public static string TrimProductName(string text)
	{
		int maxLength = (Global.IsAlphabetLanguage() ? 35 : 18);
		return TrimProductName(text, maxLength);
	}

	public static string TrimProductName(string text, int maxLength)
	{
		text = text.Replace("\n", "");
		if (text.Length > maxLength)
		{
			text = text.Remove(maxLength - 1);
			text += "...";
		}
		return text;
	}

	public static void SetCostInfo(ShopCommonSaleInfo saleInfo, UILabel _labelCostCrystal, UILabel _labelCostRupy, UILabel _labelFree, UILabel _labelTicket)
	{
		SystemText systemText = Data.SystemText;
		if (_labelTicket != null)
		{
			_labelTicket.gameObject.SetActive(value: false);
		}
		if (saleInfo.isFree)
		{
			_labelCostCrystal.gameObject.SetActive(value: false);
			_labelCostRupy.gameObject.SetActive(value: false);
			_labelFree.gameObject.SetActive(value: true);
			_labelFree.text = systemText.Get("Shop_0103");
			return;
		}
		_labelFree.gameObject.SetActive(value: false);
		if (saleInfo.costCrystal.HasValue && saleInfo.costRupy.HasValue)
		{
			_labelCostCrystal.gameObject.SetActive(value: true);
			_labelCostCrystal.gameObject.transform.localPosition = POS_COST_LABLE_RIGHT;
			_labelCostCrystal.text = systemText.Get("Shop_0112", saleInfo.costCrystal.Value.ToString());
			_labelCostRupy.gameObject.SetActive(value: true);
			_labelCostRupy.gameObject.transform.localPosition = POS_COST_LABLE_LEFT;
			_labelCostRupy.text = systemText.Get("Shop_0113", saleInfo.costRupy.Value.ToString());
		}
		else if (saleInfo.costCrystal.HasValue)
		{
			_labelCostCrystal.gameObject.SetActive(value: true);
			_labelCostCrystal.gameObject.transform.localPosition = POS_COST_LABLE_CENTER;
			_labelCostCrystal.text = systemText.Get("Shop_0112", saleInfo.costCrystal.Value.ToString());
			_labelCostRupy.gameObject.SetActive(value: false);
		}
		else if (saleInfo.costRupy.HasValue)
		{
			_labelCostRupy.gameObject.SetActive(value: true);
			_labelCostRupy.gameObject.transform.localPosition = POS_COST_LABLE_CENTER;
			_labelCostRupy.text = systemText.Get("Shop_0113", saleInfo.costRupy.Value.ToString());
			_labelCostCrystal.gameObject.SetActive(value: false);
		}
		else if (saleInfo.costTicket.HasValue)
		{
			_labelCostCrystal.gameObject.SetActive(value: false);
			_labelCostRupy.gameObject.SetActive(value: false);
			_labelTicket.gameObject.SetActive(value: true);
			_labelTicket.gameObject.transform.localPosition = POS_COST_LABLE_CENTER;
			_labelTicket.text = systemText.Get("Shop_0189", saleInfo.costTicket.Value.ToString());
		}
		else
		{
			_labelCostCrystal.gameObject.SetActive(value: false);
			_labelCostRupy.gameObject.SetActive(value: false);
			_labelFree.gameObject.SetActive(value: false);
		}
	}

	public static void OnResultCodeErrorDeckCodeInfo(int code)
	{
		switch (code)
		{
		case 10001:
		{
			DialogBase dialogBase2 = UIManager.GetInstance().CreateDialogClose(isSystem: true);
			dialogBase2.SetTitleLabel(Data.SystemText.Get("Dia_BuyBuildDeck_006_Title"));
			dialogBase2.SetText(Data.SystemText.Get("Dia_BuyBuildDeck_006_Body"));
			break;
		}
		case 10005:
		{
			DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose(isSystem: true);
			dialogBase.SetTitleLabel(Data.SystemText.Get("Dia_BuyBuildDeck_007_Title"));
			dialogBase.SetText(Data.SystemText.Get("Dia_BuyBuildDeck_007_Body"));
			break;
		}
		default:
			Wizard.ErrorDialog.Dialog.Create(code);
			break;
		}
	}

	public static string GetTicketIconPath(string itemId, bool isFetch)
	{
		return Toolbox.ResourcesManager.GetAssetTypePath("ticket_" + itemId + "_icon", ResourcesManager.AssetLoadPathType.ShopItem, isFetch);
	}

	public static string GetTicketIconRightDownPath(string itemId, bool isFetch)
	{
		return Toolbox.ResourcesManager.GetAssetTypePath("ticket_" + itemId + "_icon_right_down", ResourcesManager.AssetLoadPathType.ShopItem, isFetch);
	}
}
