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

public class MyPageItem : MonoBehaviour
{
	protected const float APPEAR_ANIMATION_DISTANCE_X = 1000f;

	protected const float APPEAR_ANIMATION_TIME = 0.3f;

	protected const float APPEAR_ANIMATION_DELAY = 0.1f;

	protected const float TWEEN_MOVE_TIME = 0.3f;

	protected const float TWEEN_DELAY_TIME = 0.1f;

	private const float CARD_PANEL_LEFT_X = -328f;

	[SerializeField]
	private MyPageCardPanelAnimation _cardMove;

	[SerializeField]
	private MyPageCardPanel[] _cardPanelList;

	private MyPageMenu _parent;

	private Dictionary<int, Vector3> _defaultPosition = new Dictionary<int, Vector3>();

	private bool _isAttachAtlasEnd;

	private bool cardAnimationInitialized;

	public MyPageCardPanel[] CardPanelList => _cardPanelList;

	protected bool IsCardMoving
	{
		get
		{
			if (_cardMove != null)
			{
				return _cardMove.IsCardMoving;
			}
			return false;
		}
	}

	public TopBar TopBar => _parent.TopBar;

	protected MyPageCardPanelAnimation CardAnimation => _cardMove;

	protected MyPageMenu Parent => _parent;

	public bool IsEnableFooterCurrentMenu { get; set; }

	public void SetCardPanelList(MyPageCardPanel[] myPageCardPanels)
	{
		_cardPanelList = myPageCardPanels;
	}

	public virtual void Initialize(MyPageMenu parent)
	{
		_parent = parent;
		SaveCardPanelDefaultPosition();
		if (cardAnimationInitialized)
		{
			return;
		}
		cardAnimationInitialized = true;
		if (_cardMove != null)
		{
			GameObject[] array = new GameObject[_cardPanelList.Length];
			for (int i = 0; i < _cardPanelList.Length; i++)
			{
				array[i] = _cardPanelList[i].gameObject;
			}
			_cardMove.SetCardPanelList(array);
		}
	}

	public virtual void Show(bool skipCardAnimation = false)
	{
		base.gameObject.SetActive(value: true);
		IsEnableFooterCurrentMenu = false;
	}

	public virtual void Hide()
	{
		base.gameObject.SetActive(value: false);
	}

	public virtual void OnClose()
	{
	}

	public void AttachAtlas()
	{
		if (!_isAttachAtlasEnd)
		{
			_isAttachAtlasEnd = true;
			UIManager.GetInstance().AttachAtlas(base.gameObject);
		}
	}

	protected void StartCardPanelAppearAnimation()
	{
		if (_cardMove != null)
		{
			_cardMove.StartCardPanelAnimation(isCutCardMotion: false);
		}
	}

	protected void SaveCardPanelDefaultPosition()
	{
		int num = _cardPanelList.Length;
		if (num > 0)
		{
			Vector3[] array = new Vector3[num];
			for (int i = 0; i < num; i++)
			{
				array[i] = _cardPanelList[i].SavePosition();
			}
			CardAnimation.UpdateCardPanelDefaultPosition(array);
		}
	}

	protected void RestoreCardPanelPosition()
	{
		if (_cardPanelList == null)
		{
			return;
		}
		for (int i = 0; i < _cardPanelList.Length; i++)
		{
			if (_cardPanelList[i] != null)
			{
				_cardPanelList[i].RestoreSavedPosition();
				_cardPanelList[i].gameObject.SetActive(value: true);
				_cardPanelList[i].EffectActive = false;
				_cardPanelList[i].EffectActive = true;
				_cardPanelList[i].CheckMaintenanceType();
				UITweenAlpha component = _cardPanelList[i].GetComponent<UITweenAlpha>();
				if (component != null)
				{
					UnityEngine.Object.Destroy(component);
				}
			}
		}
	}

	public virtual void OnMyPageInfoReceive()
	{
		if (_cardPanelList == null)
		{
			return;
		}
		for (int i = 0; i < _cardPanelList.Length; i++)
		{
			if (_cardPanelList[i] != null)
			{
				_cardPanelList[i].CheckMaintenanceType();
			}
		}
	}

	protected void RemoveITween(GameObject obj)
	{
		iTween component = obj.GetComponent<iTween>();
		if (component != null)
		{
			UnityEngine.Object.Destroy(component);
		}
	}

	protected void TweenMoveTo(GameObject obj, float x)
	{
		RemoveITween(obj);
		iTween.MoveTo(obj, iTween.Hash("x", x, "time", 0.3f, "delay", 0.1f, "islocal", true, "easetype", iTween.EaseType.easeOutExpo));
	}

	protected void TweenMoveTo(GameObject obj, float x, float y)
	{
		RemoveITween(obj);
		iTween.MoveTo(obj, iTween.Hash("x", x, "y", y, "time", 0.3f, "delay", 0.1f, "islocal", true, "easetype", iTween.EaseType.easeOutExpo));
	}

	protected void MoveCardPanelLeftPosition(GameObject moveObj)
	{
		CardAnimation.StopMove();
		TweenMoveTo(moveObj, -328f);
	}

	public void AppearAnimationFromRight(GameObject obj)
	{
		RemoveITween(obj);
		obj.gameObject.SetActive(value: true);
		iTween.MoveFrom(obj, iTween.Hash("x", obj.transform.localPosition.x + 1000f, "time", 0.3f, "delay", 0.1f, "islocal", true, "easetype", iTween.EaseType.easeOutExpo));
	}

	protected void FadeOutCardPanel(MyPageCardPanel panel, Action onFinish)
	{
		panel.EffectActive = false;
		FadeOutObject(panel.gameObject.AddMissingComponent<UITweenAlpha>(), delegate
		{
			onFinish.Call();
		});
	}

	protected void FadeOutCardPanelAndNonActive(MyPageCardPanel panel)
	{
		FadeOutCardPanel(panel, delegate
		{
			panel.gameObject.SetActive(value: false);
		});
	}

	protected static void FadeOutObject(UITweenAlpha tweenAlpha, Action onFinish = null)
	{
		tweenAlpha.End();
		FadeUtility.FadeOutObject(tweenAlpha, onFinish);
	}

	protected static void FadeInObject(UITweenAlpha tweenAlpha, Action onFinish = null)
	{
		tweenAlpha.End();
		FadeUtility.FadeInObject(tweenAlpha, onFinish);
	}

	protected void ResetAlphaAndRemoveTween(UISprite spriteObj)
	{
		UITweenAlpha component = spriteObj.GetComponent<UITweenAlpha>();
		if (component != null)
		{
			UnityEngine.Object.Destroy(component);
		}
		spriteObj.alpha = 1f;
	}

	public static CardPanelMaintenancePlate SetMaintenanceVisible(bool isMaintenance, UIButton button, CardPanelMaintenancePlate currentPlate, int buttonLabelDepth)
	{
		if (isMaintenance)
		{
			if (currentPlate == null)
			{
				GameObject prefab = GameMgr.GetIns().GetPrefabMgr().Get("Prefab/UI/Menu/CardPanelMaintenancePlate");
				currentPlate = NGUITools.AddChild(button.gameObject, prefab).GetComponent<CardPanelMaintenancePlate>();
				currentPlate.SetDepth(buttonLabelDepth + 1);
			}
			currentPlate.gameObject.SetActive(value: true);
			UIManager.SetObjectToGrey(button.gameObject, b: true);
			UIManager.SetObjectToGrey(currentPlate.gameObject, b: false);
			button.isEnabled = false;
		}
		else
		{
			if (currentPlate != null)
			{
				currentPlate.gameObject.SetActive(value: false);
			}
			UIManager.SetObjectToGrey(button.gameObject, b: false);
			button.isEnabled = true;
		}
		return currentPlate;
	}

	protected void SaveDefaultPosition(GameObject obj)
	{
		if (obj != null)
		{
			_defaultPosition[obj.GetInstanceID()] = obj.transform.localPosition;
		}
	}

	protected void RestoreDefaultPosition(GameObject obj)
	{
		if (_defaultPosition.ContainsKey(obj.GetInstanceID()))
		{
			obj.transform.localPosition = _defaultPosition[obj.GetInstanceID()];
		}
	}

	protected void ShowMenu(MyPageCardPanel selectedPanel, GameObject menuRoot, bool isAnimate)
	{
		int index = selectedPanel.Index;
		selectedPanel.RestoreSavedPosition();
		MoveCardPanelLeftPosition(selectedPanel.gameObject);
		if (isAnimate)
		{
			CardAnimation.OnClicked(index);
		}
		for (int i = 0; i < CardPanelList.Length; i++)
		{
			if (i == index)
			{
				continue;
			}
			MyPageCardPanel myPageCardPanel = CardPanelList[i];
			if (myPageCardPanel.gameObject.activeSelf)
			{
				if (isAnimate)
				{
					FadeOutCardPanelAndNonActive(myPageCardPanel);
				}
				else
				{
					myPageCardPanel.gameObject.SetActive(value: false);
				}
			}
		}
		menuRoot.SetActive(value: true);
		RestoreDefaultPosition(menuRoot);
		AppearAnimationFromRight(menuRoot);
	}
}
