using System.Collections;
using System.Collections.Generic;
using Cute;
using UnityEngine;

namespace Wizard;

public class RankWinnerReward : MonoBehaviour
{
	[SerializeField]
	private NguiObjs _rewardObjs;

	private GameObject _rewardObject;

	private int _rewardGrade;

	private string _rewardMessage = "";

	private const string ITEM_BOX_FILE_NAME = "box_2pick_{0}_close";

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

	public int RewardGrade => _rewardGrade;

	public string RewardString
	{
		get
		{
			if (_rewardMessage == "")
			{
				_rewardMessage = PlayerPrefsWrapper.GetValue(PlayerPrefsWrapper.BATTLE_WINNER_REWARD_STRING);
			}
			return _rewardMessage;
		}
	}

	public NguiObjs RewardObjs => _rewardObjs;

	public void SetInfomation(int grade, string message)
	{
		UILabel obj = _rewardObjs.labels[0];
		UISprite uISprite = _rewardObjs.sprites[2];
		SetRewardString(message);
		obj.text = _rewardMessage;
		SetRewardGrade(grade);
		uISprite.spriteName = GetBoxSpriteName();
	}

	public void SetRewardGrade(int grade)
	{
		_rewardGrade = grade;
		PlayerPrefsWrapper.SetValue(PlayerPrefsWrapper.BATTLE_WINNER_REWARD_GRADE, grade);
	}

	public void SetRewardString(string text)
	{
		_rewardMessage = text;
		PlayerPrefsWrapper.SetValue(PlayerPrefsWrapper.BATTLE_WINNER_REWARD_STRING, text);
	}

	public IEnumerator ResultWinnerReward()
	{
		GameObject obj = Object.Instantiate(Resources.Load("UI/layoutParts/RankWinnerRewardResultPanel")) as GameObject;
		obj.transform.parent = UIManager.GetInstance().UIManagerRoot.transform;
		obj.transform.localScale = Vector3.one;
		_rewardObject = obj;
		NguiObjs component = _rewardObject.GetComponent<NguiObjs>();
		UISprite bg = component.sprites[0];
		UISprite window = component.sprites[1];
		UISprite box = component.sprites[2];
		UIManager.GetInstance().AttachAtlas(box.gameObject);
		UILabel label = component.labels[0];
		label.text = GameMgr.GetIns()._rankWinnerReward.RewardString;
		UIPanel panel = _rewardObject.GetComponent<UIPanel>();
		panel.alpha = 0f;
		box.spriteName = GetBoxSpriteName();
		string loadEffectName = "cmn_arena_treasure_" + _rewardGrade;
		List<string> loadList = new List<string> { Toolbox.ResourcesManager.GetAssetTypePath(loadEffectName, ResourcesManager.AssetLoadPathType.Effect2D) };
		MonoBehaviour component2 = base.transform.parent.gameObject.GetComponent<MonoBehaviour>();
		yield return component2.StartCoroutine(Toolbox.ResourcesManager.LoadAssetGroupAsync(loadList, null));
		_assetPathList.AddRange(loadList);
		GameObject treasureEffectObject = Object.Instantiate(Toolbox.ResourcesManager.LoadObject(Toolbox.ResourcesManager.GetAssetTypePath(loadEffectName, ResourcesManager.AssetLoadPathType.Effect2D, isfetch: true)) as GameObject);
		treasureEffectObject.transform.parent = obj.transform;
		_assetPathList.AddRange(GameMgr.GetIns().GetEffectMgr().SetUIParticleShader(treasureEffectObject, null));
		bg.alpha = 0f;
		box.alpha = 0f;
		label.alpha = 0f;
		panel.alpha = 1f;
		TweenAlpha.Begin(bg.gameObject, 0.5f, 0.65f);
		TweenAlpha.Begin(label.gameObject, 0.5f, 1f);
		TweenAlpha.Begin(box.gameObject, 0.5f, 1f);
		label.transform.localPosition = new Vector3(100f, 0f, 0f);
		window.transform.localScale = new Vector3(1f, 0.01f, 1f);
		box.transform.localPosition = new Vector3(180f, 0f, 0f);
		iTween.MoveTo(label.gameObject, iTween.Hash("x", 20f, "time", 0.5f, "islocal", true, "easetype", iTween.EaseType.easeOutExpo));
		iTween.ScaleTo(window.gameObject, iTween.Hash("y", 1f, "time", 0.5f, "easetype", iTween.EaseType.easeInOutExpo));
		iTween.MoveTo(box.gameObject, iTween.Hash("y", 20f, "time", 0.5f, "islocal", true, "easetype", iTween.EaseType.easeOutExpo));
		yield return new WaitForSeconds(0.8f);
		TweenAlpha.Begin(label.gameObject, 0.5f, 0f);
		iTween.MoveTo(box.gameObject, iTween.Hash("x", 0f, "time", 0.7f, "islocal", true, "easetype", iTween.EaseType.easeInOutExpo));
		GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_2PICK_BOX_OPEN);
		yield return new WaitForSeconds(1f);
		treasureEffectObject.transform.localPosition = box.transform.localPosition;
		treasureEffectObject.transform.localScale = Vector3.one * 320f * 1.75f;
		treasureEffectObject.SetActive(value: true);
		box.gameObject.SetActive(value: false);
	}

	public string GetBoxSpriteName()
	{
		return string.Format("box_2pick_{0}_close", (PlayerPrefsWrapper.GetValue(PlayerPrefsWrapper.BATTLE_WINNER_REWARD_GRADE) - 1).ToString("00"));
	}

	public IEnumerator HideRewardObject()
	{
		NguiObjs component = _rewardObject.GetComponent<NguiObjs>();
		UISprite uISprite = component.sprites[0];
		UISprite obj = component.sprites[1];
		TweenAlpha.Begin(uISprite.gameObject, 0.3f, 0f);
		TweenAlpha.Begin(obj.gameObject, 0.3f, 0f);
		yield return new WaitForSeconds(0.3f);
		_rewardObject.SetActive(value: false);
	}

	public void RemoveObject()
	{
		if (_rewardObject != null)
		{
			_rewardObject.SetActive(value: false);
		}
		if (_assetPathList.Count > 0)
		{
			Toolbox.ResourcesManager.RemoveAssetGroup(_assetPathList);
			_assetPathList.Clear();
		}
	}

	public Color GetGradeColor()
	{
		return _rewardGrade switch
		{
			1 => new Color(0.5f, 1f, 0.75f), 
			2 => new Color(1f, 0.85f, 0.25f), 
			3 => new Color(1f, 0.5f, 0.2f), 
			4 => new Color(1f, 0.25f, 0.25f), 
			5 => new Color(0.75f, 0.35f, 1f), 
			6 => Color.white, 
			_ => Color.white, 
		};
	}

	public Vector3 GetBattleMenuBoxPosition()
	{
		return PlayerPrefsWrapper.GetValue(PlayerPrefsWrapper.BATTLE_WINNER_REWARD_GRADE) switch
		{
			1 => Vector3.up * 4.3f, 
			2 => Vector3.up * 6.8f, 
			3 => Vector3.up * 10.9f, 
			4 => Vector3.up * 10.9f, 
			5 => Vector3.up * 11.9f, 
			6 => Vector3.up * 27.14f, 
			_ => Vector3.up * 27.14f, 
		};
	}

	public void PlayOpeningSE()
	{
		if (PlayerPrefsWrapper.GetValue(PlayerPrefsWrapper.BATTLE_WINNER_REWARD_GRADE) == 6)
		{
			GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SE_SYS_WIN_REWARD_BOX_BIG);
		}
		else
		{
			GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SE_SYS_WIN_REWARD_BOX_SMALL);
		}
	}
}
