using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Cute;
using UnityEngine;
using Wizard.RoomMatch;

namespace Wizard;

public class GatheringRuleView : MonoBehaviour
{
	[SerializeField]
	private UILabel _baseType;

	[SerializeField]
	private UILabel _baseRule;

	[SerializeField]
	private UILabel _memberCount;

	[SerializeField]
	private UILabel _ownerName;

	[SerializeField]
	private UILabel _ownerIsEntryBattle;

	[SerializeField]
	private UILabel _ownerWatchBattle;

	[SerializeField]
	private UILabel _timeTitle;

	[SerializeField]
	private UILabel _startTime;

	[SerializeField]
	private UILabel _endTime;

	[SerializeField]
	private UILabel _battlePeriodLabel;

	[SerializeField]
	private UILabel _battlePeriodLabelSingleLine;

	[SerializeField]
	private UILabel _isDeckEntryLabel;

	[SerializeField]
	private GameObject _isDeckEntryRoot;

	[SerializeField]
	private UILabel _id;

	[SerializeField]
	private UserPlateBase _ownerPlate;

	private List<string> _loadResourcePath = new List<string>();

	public void SetGatheringInfo(GatheringInfo info)
	{
		SystemText systemText = Data.SystemText;
		SetRule(info.Rule, info.CurrentMemberCount);
		if (_baseType != null)
		{
			_baseType.text = GatheringUtility.GetGatheringTypeString(info);
		}
		if (_id != null)
		{
			_id.text = info.Id;
		}
		if (_ownerName != null)
		{
			_ownerName.text = info.OwnerInfo.Name;
		}
		if (_timeTitle != null)
		{
			_timeTitle.text = (info.Rule.IsTournament ? systemText.Get("Gathering_0009") : systemText.Get("Gathering_0012"));
		}
		if (_startTime != null)
		{
			_startTime.text = info.BattleStartTime;
		}
		if (_endTime != null)
		{
			_endTime.text = info.FinishTime;
		}
		if (_battlePeriodLabel != null && !info.Rule.IsTournament)
		{
			_battlePeriodLabel.text = systemText.Get("Gathering_Information_0005", info.BattleStartTime, info.FinishTime);
		}
		if (_battlePeriodLabelSingleLine != null && !info.Rule.IsTournament)
		{
			_battlePeriodLabelSingleLine.text = systemText.Get("Gathering_Information_0014", info.BattleStartTime, info.FinishTime);
		}
		if (_ownerWatchBattle != null)
		{
			switch (info.Rule.WatchSetting)
			{
			case GatheringRule.eWatchSetting.ALL_MEMBER:
				_ownerWatchBattle.text = systemText.Get("Gathering_0016");
				break;
			case GatheringRule.eWatchSetting.OWNER_ONLY:
				_ownerWatchBattle.text = systemText.Get("Gathering_0015");
				break;
			case GatheringRule.eWatchSetting.NONE:
				_ownerWatchBattle.text = systemText.Get("Gathering_0017");
				break;
			}
		}
		List<string> loadResourceList = info.OwnerInfo.GetUserAssetPathList().Except(_loadResourcePath).ToList();
		UIManager.GetInstance().StartCoroutine(LoadResource(info, loadResourceList));
	}

	private void OnDestroy()
	{
		Toolbox.ResourcesManager.RemoveAssetGroup(_loadResourcePath);
		_loadResourcePath.Clear();
	}

	private IEnumerator LoadResource(GatheringInfo info, List<string> loadResourceList)
	{
		yield return UIManager.GetInstance().StartCoroutine(Toolbox.ResourcesManager.LoadAssetGroupAsync(loadResourceList, delegate
		{
			_loadResourcePath.AddRange(loadResourceList);
		}));
		if (_ownerPlate != null)
		{
			_ownerPlate.InitializeSimplePlate(info.OwnerInfo);
		}
	}

	private void SetRule(GatheringRule rule, int memberCount)
	{
		SystemText systemText = Data.SystemText;
		_baseRule.text = RoomRuleSetting.GetWinTypeString(rule.BattleParameterInstance.Rule) + "  " + FormatBehaviorManager.GetFormatName(rule.BattleParameterInstance.DeckFormat);
		_memberCount.text = systemText.Get("Gathering_Information_0003", memberCount.ToString(), rule.MaxMember.ToString());
		if (_ownerIsEntryBattle != null)
		{
			_ownerIsEntryBattle.text = (rule.IsOwnerEntryBattle ? systemText.Get("Gathering_Information_0008") : systemText.Get("Gathering_Information_0009"));
		}
		if (_isDeckEntryRoot != null)
		{
			_isDeckEntryRoot.SetActive(!rule.IsTournament);
		}
		if (_isDeckEntryLabel != null)
		{
			_isDeckEntryLabel.text = (rule.IsEntryDeckOnly ? systemText.Get("Gathering_Information_0022") : systemText.Get("Gathering_Information_0023"));
		}
	}
}
