using System.Collections.Generic;
using Cute;
using LitJson;

namespace Wizard;

public class PackConfig
{
	public List<PackChildGachaInfo> ChildGachaInfoList { get; } = new List<PackChildGachaInfo>();

	public int PackId { get; set; }

	public int BasePackId { get; set; }

	public int GachaType { get; set; }

	public string Title { get; set; }

	public string Description { get; set; }

	public int SleeveId { get; set; }

	public int SpecialSleeveId { get; set; }

	public PackCategory Category { get; set; }

	public int OverrideDrawEffectPackId { get; set; }

	public int OverrideUIEffectPackId { get; set; }

	public bool IsHideNotEnoughBuy { get; set; }

	public int OpenCount { get; set; }

	public int OpenCountLimit { get; set; }

	public RemainTime RemainTime { get; set; }

	public int RemainStepupOpenCount { get; set; }

	public int TotalStepupOpenCount { get; set; }

	public bool IsNew { get; set; }

	public int TsExchangePosterId { get; set; }

	public List<PackBannerData> ListPackBanner { get; } = new List<PackBannerData>();

	public GachaPointData GachaPointData { get; set; }

	public int SelectedClassId { get; set; } = 10;

	public bool IsSpecialLayout
	{
		get
		{
			if (!IsSpecialCardPack && !IsLegendCardPack && Category != PackCategory.FreePackLeaderSkin && Category != PackCategory.RotationStarterCardPack)
			{
				return Category == PackCategory.LegendAndLeaderSkinSinglePack;
			}
			return true;
		}
	}

	public bool IsUseLongPoster => IsSpecialLayout;

	public bool IsUsePackPointLayout
	{
		get
		{
			if (IsSpecialLayout)
			{
				return false;
			}
			if (IsPrerelease)
			{
				return false;
			}
			return true;
		}
	}

	public bool IsSpecialCardPack
	{
		get
		{
			if (Category != PackCategory.SpecialCardPack)
			{
				return Category == PackCategory.LimitedSpecialCardPack;
			}
			return true;
		}
	}

	public bool IsNeedRemainTime
	{
		get
		{
			if (!IsSpecialCardPack && Category != PackCategory.FreePackLeaderSkin && Category != PackCategory.LeaderSkinPack)
			{
				return Category == PackCategory.LegendAndLeaderSkinSinglePack;
			}
			return true;
		}
	}

	public bool IsLegendCardPack => Category == PackCategory.LegendCardPack;

	public bool IsRotationStarterCardPack => Category == PackCategory.RotationStarterCardPack;

	public bool IsShowAppealImage => Category == PackCategory.LeaderSkinPack;

	public bool IsPrerelease { get; set; }

	public PrereleasePurchaseInfo PrereleasePurchaseInfo { get; set; }

	public bool IsExistSpecialPackPurchaseRewards => SpecialPackRewardsList != null;

	public List<PurchaseRewardInfo> SpecialPackRewardsList { get; private set; }

	public ShopExpirtyInfo ExpirtyInfo { get; set; }

	public int GetGachaIdForEffectResource()
	{
		if (Category == PackCategory.LeaderSkinPack)
		{
			return OverrideDrawEffectPackId;
		}
		if (IsSpecialLayout || GachaUI.IsAdditionalPackId(PackId) || GachaUI.IsTsSkinPickupPackId(PackId))
		{
			return OverrideDrawEffectPackId;
		}
		return PackId;
	}

	public int GetGachaIdForUIResource()
	{
		if (!IsSpecialCardPack)
		{
			return PackId;
		}
		return OverrideUIEffectPackId;
	}

	public void SetSpecialPackRewardsList(JsonData parentJsonData)
	{
		if (!parentJsonData.Keys.Contains("gacha_purchase_reward"))
		{
			return;
		}
		SpecialPackRewardsList = new List<PurchaseRewardInfo>();
		JsonData jsonData = parentJsonData["gacha_purchase_reward"];
		for (int i = 0; i < jsonData.Count; i++)
		{
			JsonData jsonData2 = jsonData[i];
			PurchaseRewardInfo purchaseRewardInfo = new PurchaseRewardInfo();
			JsonData jsonData3 = jsonData2["reward_list"];
			for (int j = 0; j < jsonData3.Count; j++)
			{
				ShopCommonRewardInfo shopCommonRewardInfo = new ShopCommonRewardInfo();
				shopCommonRewardInfo.Type = jsonData3[j]["reward_type"].ToInt();
				shopCommonRewardInfo.UserGoodsId = jsonData3[j]["reward_detail_id"].ToLong();
				shopCommonRewardInfo.Num = jsonData3[j]["reward_number"].ToInt();
				purchaseRewardInfo.RewardInfoList.Add(shopCommonRewardInfo);
			}
			int num = jsonData2["purchase_count"].ToInt() / 10;
			purchaseRewardInfo.PurchaseNthText = Data.SystemText.Get("Shop_0186", num.ToString());
			purchaseRewardInfo.IsGet = jsonData2["is_received"].ToBoolean();
			SpecialPackRewardsList.Add(purchaseRewardInfo);
		}
	}

	public string GetPackPosterTexturePath(bool isFetch)
	{
		int gachaIdForUIResource = GetGachaIdForUIResource();
		string path = (IsPrerelease ? $"card_pack_{gachaIdForUIResource}_poster_pre" : ((TsExchangePosterId <= 0) ? $"card_pack_{gachaIdForUIResource}_poster" : $"card_pack_{gachaIdForUIResource}_poster_{TsExchangePosterId}"));
		return Toolbox.ResourcesManager.GetAssetTypePath(path, ResourcesManager.AssetLoadPathType.ShopCardPack, isFetch);
	}

	public string GetPackBounsPosterTexturePath(bool isFetch)
	{
		string path = $"card_pack_{GetGachaIdForUIResource()}_poster_bonus";
		return Toolbox.ResourcesManager.GetAssetTypePath(path, ResourcesManager.AssetLoadPathType.ShopCardPack, isFetch);
	}

	public string GetPackTitleLogoTexturePath(bool isFetch)
	{
		int gachaIdForUIResource = GetGachaIdForUIResource();
		string path = ((!IsPrerelease) ? $"card_pack_{gachaIdForUIResource}_logo_01" : $"card_pack_{gachaIdForUIResource}_logo_01_pre");
		return Toolbox.ResourcesManager.GetAssetTypePath(path, ResourcesManager.AssetLoadPathType.ShopCardPack, isFetch);
	}

	public string GetPackIconTexturePath(bool isFetch)
	{
		int ticketId = GetTicketId();
		string path = $"card_pack_{ticketId}_icon";
		return Toolbox.ResourcesManager.GetAssetTypePath(path, ResourcesManager.AssetLoadPathType.ShopCardPack, isFetch);
	}

	public string GetPackDrumrollLogoTexturePath(bool isFetch)
	{
		int gachaIdForUIResource = GetGachaIdForUIResource();
		string path = $"card_pack_{gachaIdForUIResource}_logo_02";
		return Toolbox.ResourcesManager.GetAssetTypePath(path, ResourcesManager.AssetLoadPathType.ShopCardPack, isFetch);
	}

	public bool EnableBuyPack()
	{
		bool result = false;
		for (int i = 0; i < ChildGachaInfoList.Count; i++)
		{
			if ((ChildGachaInfoList[i].PackType == GachaUI.CardPackType.FREE_PACK_WITH_SKIN || ChildGachaInfoList[i].PackType == GachaUI.CardPackType.FREE_PACKS) && ChildGachaInfoList[i].AvailableCount > 0)
			{
				result = true;
				break;
			}
			if (ChildGachaInfoList[i].CostGoodsCount > 0)
			{
				result = true;
				break;
			}
		}
		return result;
	}

	public int GetTicketId()
	{
		int result = PackId;
		PackChildGachaInfo packChildGachaInfo = ChildGachaInfoList.Find((PackChildGachaInfo x) => x.PackType == GachaUI.CardPackType.TICKET_MULTI);
		if (packChildGachaInfo != null)
		{
			result = (int)packChildGachaInfo.UserGoodsId;
		}
		return result;
	}

	public PackChildGachaInfo CanFreeBuyInfo()
	{
		foreach (PackChildGachaInfo childGachaInfo in ChildGachaInfoList)
		{
			if (childGachaInfo.PackType == GachaUI.CardPackType.FREE_PACKS)
			{
				return childGachaInfo;
			}
		}
		return null;
	}
}
