using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Wizard;

public class MyPageBanner : MyPageBannerBase
{
	protected enum MoveSide
	{
		Left,
		Right
	}

	[SerializeField]
	protected UICenterOnChild _uiCenterOnChild;

	[SerializeField]
	protected GameObject _pagerPrefab;

	[SerializeField]
	protected UIWrapContent _uiWrapContent;

	[SerializeField]
	protected GameObject _pagerBaseObject;

	[SerializeField]
	protected GameObject _buttonBase;

	[SerializeField]
	protected GameObject _buttonLeftObject;

	[SerializeField]
	protected GameObject _buttonRightObject;

	[SerializeField]
	private GameObject _bgObject;

	protected bool _isAnimation;

	protected bool _isCanSlide;

	protected bool _isClickStart;

	protected Vector3 _touchPoint;

	protected int _bannerNo;

	protected List<UISprite> _pagerSpriteList;

	protected float _updateTimer;

	protected GameObject _centerObject;

	protected bool _isLeftButtonPressed;

	protected bool _isRightButtonPressed;

	private const int SLIDE_LIMIT_VALUE = 30;

	private const string PAGER_OFF_SPRITE_NAME = "carousel_marker_off";

	private const string PAGER_ON_SPRITE_NAME = "carousel_marker_on";

	private const string CSV_NAME = "banner";

	private void Start()
	{
		UIEventListener.Get(_buttonLeftObject).onPress = LeftButtonOnPress;
		UIEventListener.Get(_buttonRightObject).onPress = RightButtonOnPress;
	}

	private void Update()
	{
		if (!base.IsCreateEnd)
		{
			return;
		}
		slideMoveUpdate();
		if (_bannerList.Count > 1 && _isCanSlide)
		{
			_updateTimer += Time.deltaTime;
			float changeTime = _bannerList[_bannerNo]._changeTime;
			if (_updateTimer >= changeTime)
			{
				SlideStartSetting(MoveSide.Right);
			}
		}
		if (_isCanSlide)
		{
			if (_isLeftButtonPressed)
			{
				GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_SLIDE_BTN);
				SlideStartSetting(MoveSide.Left);
			}
			else if (_isRightButtonPressed)
			{
				GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_SLIDE_BTN);
				SlideStartSetting(MoveSide.Right);
			}
		}
	}

	protected override IEnumerator CreateBannerImage()
	{
		_bannerList = new List<BannerInfo>(Data.MyPage.data._bannerList);
		if (!base.IsEnableBanner)
		{
			base.gameObject.SetActive(value: false);
			yield break;
		}
		yield return LoadBannerImage();
		while (!base.gameObject.activeInHierarchy)
		{
			yield return null;
		}
		for (int i = 0; i < _bannerList.Count; i++)
		{
			GameObject gameObject = UnityEngine.Object.Instantiate(_bannerImagePrefab);
			gameObject.transform.SetParent(_uiWrapContent.transform);
			gameObject.transform.localScale = Vector3.one;
			gameObject.transform.localPosition = Vector3.zero;
			_bannerList[i].BannerGameObject = gameObject;
		}
		_uiWrapContent.onInitializeItem = _OnInitializeItem;
		_uiWrapContent.SortBasedOnScrollMovement();
		_uiCenterOnChild.onFinished = _OnFinishedCenterChild;
		if (_bannerList.Count > 1)
		{
			GameObject gameObject2 = _uiWrapContent.transform.Find("0").gameObject;
			_uiWrapContent.transform.Find((_bannerList.Count - 1).ToString()).gameObject.transform.localPosition = new Vector3(gameObject2.transform.localPosition.x - (float)_uiWrapContent.itemSize, gameObject2.transform.localPosition.y, gameObject2.transform.localPosition.z);
			_pagerSpriteList = new List<UISprite>();
			for (int j = 0; j < _bannerList.Count; j++)
			{
				GameObject gameObject3 = UnityEngine.Object.Instantiate(_pagerPrefab);
				gameObject3.transform.SetParent(_pagerBaseObject.transform);
				gameObject3.transform.localScale = Vector3.one;
				gameObject3.transform.localPosition = Vector3.zero;
				gameObject3.name = j.ToString();
				_pagerSpriteList.Add(gameObject3.GetComponent<UISprite>());
			}
			_PagerUpDate();
			UIGrid component = _pagerBaseObject.GetComponent<UIGrid>();
			component.enabled = true;
			float x = component.transform.localPosition.x - component.cellWidth * (float)(_bannerList.Count - 1) / 2f;
			component.transform.localPosition = new Vector3(x, component.transform.localPosition.y, component.transform.localPosition.z);
		}
		else
		{
			_buttonBase.SetActive(value: false);
		}
		_centerObject = _uiWrapContent.transform.Find(_bannerNo.ToString()).gameObject;
	}

	protected void BannerOnPress(GameObject inObject, bool inState)
	{
		if (inState && Input.GetMouseButtonDown(0))
		{
			_touchPoint = Input.mousePosition;
			_isClickStart = true;
			_isCanSlide = true;
			StartCoroutine(BannerPressAnimation(inObject));
		}
	}

	private void slideMoveUpdate()
	{
		if (!_isAnimation)
		{
			_isCanSlide = true;
		}
		if (_isClickStart && Input.GetMouseButton(0) && _isCanSlide)
		{
			if (Input.mousePosition.x < _touchPoint.x - 30f)
			{
				GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_SLIDE_BTN);
				SlideStartSetting(MoveSide.Right);
			}
			else if (Input.mousePosition.x > _touchPoint.x + 30f)
			{
				GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_SLIDE_BTN);
				SlideStartSetting(MoveSide.Left);
			}
		}
	}

	protected void LeftButtonOnPress(GameObject inObject, bool isPressed)
	{
		_isLeftButtonPressed = isPressed;
		_OnFinishedCenterChild();
	}

	protected void RightButtonOnPress(GameObject inObject, bool isPressed)
	{
		_isRightButtonPressed = isPressed;
		_OnFinishedCenterChild();
	}

	protected void SlideStartSetting(MoveSide inMoveSide)
	{
		_isAnimation = true;
		_isCanSlide = false;
		_isClickStart = false;
		_touchPoint = Input.mousePosition;
		_updateTimer = 0f;
		if (inMoveSide == MoveSide.Left)
		{
			_bannerNo = ((_bannerNo - 1 < 0) ? (_bannerList.Count - 1) : (_bannerNo - 1));
		}
		else
		{
			_bannerNo = (_bannerNo + 1) % _bannerList.Count;
		}
		if (_bannerList.Count == 2)
		{
			GameObject gameObject = _uiWrapContent.transform.Find(_bannerNo.ToString()).gameObject;
			Vector3 localPosition = _centerObject.transform.localPosition;
			if (inMoveSide == MoveSide.Left)
			{
				localPosition.x -= _uiWrapContent.itemSize;
				gameObject.transform.localPosition = localPosition;
			}
			else
			{
				localPosition.x += _uiWrapContent.itemSize;
				gameObject.transform.localPosition = localPosition;
			}
		}
		_centerObject = _uiWrapContent.transform.Find(_bannerNo.ToString()).gameObject;
		_uiCenterOnChild.CenterOn(_centerObject.transform);
		_PagerUpDate();
	}

	protected void _OnInitializeItem(GameObject go, int wrapIndex, int realIndex)
	{
		int index = wrapIndex;
		UIEventListener.Get(go).onPress = BannerOnPress;
		go.name = index.ToString();
		InitializeEventHandler(go, _bannerList[index]);
		UIEventListener uIEventListener = UIEventListener.Get(go);
		uIEventListener.onClick = (UIEventListener.VoidDelegate)Delegate.Combine(uIEventListener.onClick, (UIEventListener.VoidDelegate)delegate
		{
			_isClickStart = false;
		});
	}

	protected void _OnFinishedCenterChild()
	{
		_isAnimation = false;
	}

	protected void _PagerUpDate()
	{
		if (_bannerList.Count <= 1)
		{
			return;
		}
		for (int i = 0; i < _bannerList.Count; i++)
		{
			if (i == _bannerNo)
			{
				_pagerSpriteList[i].spriteName = "carousel_marker_on";
			}
			else
			{
				_pagerSpriteList[i].spriteName = "carousel_marker_off";
			}
		}
	}

	private IEnumerator BannerPressAnimation(GameObject inTweenObject)
	{
		TweenScale tweenScaleComponent = inTweenObject.GetComponent<TweenScale>();
		if ((bool)tweenScaleComponent)
		{
			tweenScaleComponent.PlayForward();
			while (Input.GetMouseButton(0))
			{
				yield return null;
			}
			tweenScaleComponent.PlayReverse();
		}
	}

	protected void OnDisable()
	{
		_isClickStart = false;
	}

	public void SetChild(GameObject obj)
	{
		obj.transform.parent = _bgObject.transform;
	}
}
