using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using Wizard.Scripts.Network.Data.TaskData.Arena;

namespace Wizard;

public class SelectSkinCardPlate : MonoBehaviour
{
	private readonly Quaternion CARDOBJECT_ROTATION_QUATERNION = new Quaternion(0f, 0f, 0f, 0f);

	private const string SPOT_CARD_NUM_FORMAT = "[fcd24a]+{0}[-]";

	[SerializeField]
	private GameObject _objCardRoot;

	[SerializeField]
	private UILabel _labelAcquiredOnCard;

	[SerializeField]
	private UILabel _labelCardName;

	[SerializeField]
	private UILabel _labelCardPossessionNum;

	[SerializeField]
	private UILabel _labelCardPossessionNumNormal;

	[SerializeField]
	private UILabel _labelCardPossessionNumPremium;

	[SerializeField]
	private UIToggle _toggleSelect;

	[SerializeField]
	private UILabel _labelToggle;

	[SerializeField]
	private UILabel _labelDescription;

	[SerializeField]
	private UILabel _labelAcquired;

	[SerializeField]
	private UIButton _buttonAcquire;

	private GameObject _cardObject;

	private SelectSkinCardInfo _skinCardInfo;

	private bool _isFirstToggleChange = true;

	private bool _isSetValue;

	public void SetData(SelectSkinCardInfo skinCardInfo, Action<int, bool, SelectSkinCardPlate> onClickSelectToggle, Dictionary<int, bool> selectCardStateDict, GameObject cardObject, GameObject evacuationParent, Action<int, bool> onClickAcquireButton)
	{
		_skinCardInfo = skinCardInfo;
		_labelCardName.text = UserGoods.getUserGoodsName(UserGoods.Type.Card, _skinCardInfo.CardId);
		DataMgr dataMgr = GameMgr.GetIns().GetDataMgr();
		int possessionCardNum = dataMgr.GetPossessionCardNum(_skinCardInfo.CardId, isIncludingSpotCard: false);
		int spotCardNum = dataMgr.SpotCardData.GetSpotCardNum(_skinCardInfo.CardId);
		_labelCardPossessionNumNormal.text = possessionCardNum + ((spotCardNum > 0) ? $"[fcd24a]+{spotCardNum}[-]" : string.Empty);
		int cardId = _skinCardInfo.CardId + 1;
		int possessionCardNum2 = dataMgr.GetPossessionCardNum(cardId, isIncludingSpotCard: false);
		_labelCardPossessionNumPremium.text = possessionCardNum2.ToString();
		int num = possessionCardNum + possessionCardNum2 + spotCardNum;
		_labelCardPossessionNum.text = num.ToString();
		SetLabel(skinCardInfo);
		SetCardObject(cardObject, evacuationParent);
		if (onClickAcquireButton != null)
		{
			_buttonAcquire.gameObject.SetActive(value: true);
			_buttonAcquire.onClick.Clear();
			_buttonAcquire.onClick.Add(new EventDelegate(delegate
			{
				GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_BTN_DECIDE);
				onClickAcquireButton(_skinCardInfo.CardId, _skinCardInfo.HasSkin);
			}));
			_toggleSelect.gameObject.SetActive(value: false);
			_labelToggle.gameObject.SetActive(value: false);
			_labelAcquiredOnCard.gameObject.SetActive(value: false);
			return;
		}
		UIManager.SetObjectToGrey(_toggleSelect.gameObject, !_skinCardInfo.HasSkin);
		UIManager.SetObjectToGrey(_labelToggle.gameObject, !_skinCardInfo.HasSkin);
		if (!_toggleSelect.value)
		{
			_toggleSelect.activeSprite.alpha = 0f;
		}
		_toggleSelect.onChange.Clear();
		_toggleSelect.onChange.Add(new EventDelegate(delegate
		{
			if (!_isFirstToggleChange)
			{
				onClickSelectToggle(_skinCardInfo.CardId, !_toggleSelect.value, this);
			}
			_isFirstToggleChange = false;
		}));
		SetSelectStatus(selectCardStateDict, isOnClickToggle: false);
		if (_buttonAcquire != null)
		{
			_buttonAcquire.gameObject.SetActive(value: false);
		}
	}

	private void SetLabel(SelectSkinCardInfo skinCardInfo)
	{
		_labelDescription.text = GetRewardListText(skinCardInfo);
		_labelAcquired.gameObject.SetActive(skinCardInfo.HasSkin);
		_labelAcquired.text = Data.SystemText.Get("Shop_0166");
	}

	private static string GetRewardListText(SelectSkinCardInfo skinCardInfo)
	{
		List<string> list = skinCardInfo.RewardList.Select((Wizard.Scripts.Network.Data.TaskData.Arena.Reward reward) => reward.UserGoodsData).OrderBy(GachaUtil.GetRewardListSortIndex).Select(GachaUtil.GetRewardListGoodsTypeName)
			.Distinct()
			.ToList();
		if (list.Count == 0)
		{
			Debug.LogError($"reward is not set : {skinCardInfo.CardId} {UserGoods.getUserGoodsName(UserGoods.Type.Card, skinCardInfo.CardId)}");
			return string.Empty;
		}
		return UIUtil.CreateListText(list, Data.SystemText.Get("Shop_0226"), Data.SystemText.Get("Shop_0234"));
	}

	public void SetSelectStatus(Dictionary<int, bool> selectCardStateDict, bool isOnClickToggle)
	{
		if (!_isSetValue)
		{
			_isSetValue = true;
			_toggleSelect.value = !selectCardStateDict[_skinCardInfo.CardId];
			if (isOnClickToggle)
			{
				GameMgr.GetIns().GetSoundMgr().PlaySe(_toggleSelect.value ? Se.TYPE.SYS_TOGGLE_ON : Se.TYPE.SYS_TOGGLE_OFF);
			}
			if (_cardObject != null)
			{
				SetObjectToGreyEnableCollider(_cardObject, !selectCardStateDict[_skinCardInfo.CardId]);
				_labelAcquiredOnCard.gameObject.SetActive(!selectCardStateDict[_skinCardInfo.CardId]);
			}
			_isSetValue = false;
		}
	}

	private void SetCardObject(GameObject cardObject, GameObject evacuationParent)
	{
		if (_cardObject != null)
		{
			_cardObject.SetActive(value: false);
			_cardObject.transform.parent = evacuationParent.transform;
		}
		cardObject.transform.parent = _objCardRoot.transform;
		cardObject.transform.localPosition = Vector3.zero;
		cardObject.transform.rotation = CARDOBJECT_ROTATION_QUATERNION;
		cardObject.SetActive(value: true);
		_cardObject = cardObject;
	}

	private void SetObjectToGreyEnableCollider(GameObject o, bool b)
	{
		Color color = (b ? LabelDefine.TEXT_COLOR_BUTTON_DISABLE : LabelDefine.TEXT_COLOR_BUTTON_ENABLE);
		Color color2 = (b ? LabelDefine.TEXT_COLOR_BUTTON_DISABLE : ((Color32)Color.white));
		string text = "_grey";
		if (b)
		{
			if (!o.name.Contains(text))
			{
				o.name += text;
			}
		}
		else
		{
			o.name = o.name.Replace(text, "");
		}
		UISprite[] components = o.GetComponents<UISprite>();
		for (int i = 0; i < components.Length; i++)
		{
			components[i].color = color2;
		}
		UITexture[] componentsInChildren = o.GetComponentsInChildren<UITexture>(includeInactive: true);
		for (int i = 0; i < componentsInChildren.Length; i++)
		{
			componentsInChildren[i].color = color2;
		}
		components = o.GetComponentsInChildren<UISprite>(includeInactive: true);
		for (int i = 0; i < components.Length; i++)
		{
			components[i].color = color2;
		}
		UIWidget[] componentsInChildren2 = o.GetComponentsInChildren<UIWidget>(includeInactive: true);
		for (int i = 0; i < componentsInChildren2.Length; i++)
		{
			componentsInChildren2[i].color = color2;
		}
		UIButton[] componentsInChildren3 = o.GetComponentsInChildren<UIButton>(includeInactive: true);
		foreach (UIButton obj in componentsInChildren3)
		{
			obj.defaultColor = color2;
			obj.disabledColor = color2;
		}
		UILabel[] componentsInChildren4 = o.GetComponentsInChildren<UILabel>(includeInactive: true);
		for (int i = 0; i < componentsInChildren4.Length; i++)
		{
			componentsInChildren4[i].color = color;
		}
		TweenColor[] componentsInChildren5 = o.GetComponentsInChildren<TweenColor>(includeInactive: true);
		foreach (TweenColor obj2 in componentsInChildren5)
		{
			obj2.from = color2;
			obj2.to = color2;
		}
	}
}
