using System;
using Cute;
using UnityEngine;

namespace Wizard;

public class ChapterSelectSphere : MonoBehaviour
{
	[SerializeField]
	private UIButton _button;

	[SerializeField]
	private UISprite _bodySprite;

	[SerializeField]
	private UISprite _arrowDownSprite;

	[SerializeField]
	private UISprite _arrowUpSprite;

	private float _arrowAlpha = 1f;

	private bool _isArrowAlphaDown = true;

	private const float ARROW_ANIMATION_SPEED = 1f;

	private const float SCROLL_ROTATE_REVISION = 7f;

	public Action OnClick { get; set; }

	public bool IsScrollUpEnable { get; set; }

	public bool IsScrollDownEnable { get; set; }

	private void Start()
	{
		_button.onClick.Add(new EventDelegate(delegate
		{
			OnClick.Call();
		}));
	}

	public void UpdateChapterSelectStatus(bool isChapterSelectVisible, bool isSelectEnable)
	{
		_bodySprite.spriteName = GetBodySpriteName(isChapterSelectVisible, isSelectEnable);
		_arrowUpSprite.spriteName = GetArrowSpriteName(isChapterSelectVisible, IsScrollUpEnable);
		_arrowDownSprite.spriteName = GetArrowSpriteName(isChapterSelectVisible, IsScrollDownEnable);
		_arrowUpSprite.alpha = ((isChapterSelectVisible && IsScrollUpEnable) ? _arrowAlpha : 1f);
		_arrowDownSprite.alpha = ((isChapterSelectVisible && IsScrollDownEnable) ? _arrowAlpha : 1f);
	}

	public void OnSelectChapter(bool isChapterSelectEnable)
	{
		_arrowUpSprite.spriteName = GetArrowSpriteName(isChapterSelectEnable, IsScrollUpEnable);
		_arrowDownSprite.spriteName = GetArrowSpriteName(isChapterSelectEnable, IsScrollDownEnable);
		_arrowUpSprite.alpha = (IsScrollUpEnable ? _arrowAlpha : 1f);
		_arrowDownSprite.alpha = (IsScrollDownEnable ? _arrowAlpha : 1f);
	}

	public void UpdateArrowAlpha()
	{
		if (UpdatePingPongByDeltaTime(ref _arrowAlpha, 0f, 1f, 1f, _isArrowAlphaDown))
		{
			_isArrowAlphaDown = !_isArrowAlphaDown;
		}
		if (IsScrollUpEnable)
		{
			_arrowUpSprite.alpha = _arrowAlpha;
		}
		if (IsScrollDownEnable)
		{
			_arrowDownSprite.alpha = _arrowAlpha;
		}
	}

	public void UpdateRotationOnScroll(float areaY, int chapterCount)
	{
		iTween.Stop(_bodySprite.gameObject);
		float z = 0f;
		float num = 80f;
		float num2 = 50f;
		if (areaY >= (float)chapterCount * num - num2)
		{
			z = (float)chapterCount * num - num2 - areaY;
			z /= 7f;
			z *= -1f;
		}
		else if (areaY <= 0f - num2)
		{
			z = areaY;
			z /= 7f;
		}
		iTween.RotateUpdate(_bodySprite.gameObject, new Vector3(0f, 0f, z), 0.2f);
	}

	public void ResetRotationOnScroll()
	{
		iTween.Init(_bodySprite.gameObject);
		iTween.RotateTo(_bodySprite.gameObject, iTween.Hash("z", 0, "time", 1.35f, "easetype", iTween.EaseType.easeOutElastic));
	}

	private string GetArrowSpriteName(bool isChapterSelectEnable, bool isscrollenable)
	{
		if (isChapterSelectEnable)
		{
			if (isscrollenable)
			{
				return "arrow_jog_01";
			}
			return "arrow_jog_02";
		}
		return "arrow_jog_03";
	}

	private string GetBodySpriteName(bool isChapterSelectEnable, bool isChapterListSwitchEnable)
	{
		if (isChapterListSwitchEnable)
		{
			if (isChapterSelectEnable)
			{
				return "btn_jog_01_core";
			}
			return "btn_jog_03_core";
		}
		return "btn_jog_03_core";
	}

	private static bool UpdatePingPongByDeltaTime(ref float val, float min, float max, float speed, bool isdown)
	{
		bool result = false;
		if (isdown)
		{
			val -= speed * Time.deltaTime;
			if (val < min)
			{
				val = min;
				result = true;
			}
		}
		else
		{
			val += speed * Time.deltaTime;
			if (val > max)
			{
				val = max;
				result = true;
			}
		}
		return result;
	}
}
