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

public class StaffRollScroll : MonoBehaviour
{
	public bool Finish
	{
		get
		{
			return this.finish;
		}
	}

	private void Awake()
	{
		this.ReadCSVFile_Data();
		this.ReadCSVFile_StaffName();
	}

	private void Start()
	{
		this.CreateLabels();
		this.mode = StaffRollScroll.Mode.Scroll;
		GameMain.Instance.SoundMgr.PlayBGM(this.soundFileName + ".ogg", 0f, false);
	}

	private void Update()
	{
		StaffRollScroll.Mode mode = this.mode;
		if (mode != StaffRollScroll.Mode.Scroll)
		{
			if (mode == StaffRollScroll.Mode.EndReady)
			{
				this.imgCtrl.Finish();
				this.mode = StaffRollScroll.Mode.End;
				base.StartCoroutine(this.End());
			}
		}
		else
		{
			this.Scroll();
		}
	}

	private IEnumerator End()
	{
		yield return new WaitForSeconds(9f);
		this.finish = true;
		yield break;
	}

	private void Scroll()
	{
		float num = this.progressTime / this.scrollTime;
		float y = Mathf.Lerp(0f, Mathf.Abs(this.endPosY), num);
		Vector3 localPosition = base.gameObject.transform.localPosition;
		localPosition.y = y;
		base.gameObject.transform.localPosition = localPosition;
		float deltaTime = Time.deltaTime;
		this.progressTime += deltaTime;
		this.imgCtrl.CheckChange(num);
		if (num >= 1f)
		{
			this.mode = StaffRollScroll.Mode.EndReady;
		}
	}

	private void ReadCSVFile_Data()
	{
		NDebug.Assert(GameUty.FileSystem.IsExistentFile("staffroll_data.nei"), "staffroll_data.nei\nopen failed.");
		using (AFileBase afileBase = GameUty.FileSystem.FileOpen("staffroll_data.nei"))
		{
			using (CsvParser csvParser = new CsvParser())
			{
				bool condition = csvParser.Open(afileBase);
				NDebug.Assert(condition, "staffroll_data.nei\nopen failed.");
				this.soundFileName = csvParser.GetCellAsString(1, 1);
				this.scrollTime = (float)csvParser.GetCellAsInteger(1, 2);
			}
		}
	}

	private void ReadCSVFile_StaffName()
	{
		if (StaffRollScroll.dataList != null)
		{
			return;
		}
		StaffRollScroll.dataList = new List<StaffRollScroll.Data>();
		NDebug.Assert(GameUty.FileSystem.IsExistentFile("staffroll_stafflist.nei"), "staffroll_stafflist.nei\nopen failed.");
		using (AFileBase afileBase = GameUty.FileSystem.FileOpen("staffroll_stafflist.nei"))
		{
			using (CsvParser csvParser = new CsvParser())
			{
				bool condition = csvParser.Open(afileBase);
				NDebug.Assert(condition, "staffroll_stafflist.nei\nopen failed.");
				for (int i = 1; i < csvParser.max_cell_y; i++)
				{
					StaffRollScroll.Data data = new StaffRollScroll.Data();
					data.name = csvParser.GetCellAsString(1, i);
					string cellAsString = csvParser.GetCellAsString(0, i);
					string[] array = cellAsString.Split(new char[]
					{
						','
					});
					bool flag = true;
					foreach (string a in array)
					{
						if (a == "読み込み終了")
						{
							return;
						}
						if (a == "停止位置")
						{
							data.stopPoint = true;
						}
						else if (a == "文字_小")
						{
							data.type = StaffRollScroll.Data.Type.Small1;
						}
						else if (a == "文字_小2")
						{
							data.type = StaffRollScroll.Data.Type.Small2;
						}
						else if (a == "ご主人様")
						{
							data.userName = true;
						}
						else if (a == "コピーライト")
						{
							data.name = "©" + data.name;
						}
						else if (a == "ロゴ")
						{
							data.type = StaffRollScroll.Data.Type.Logo;
						}
					}
					if (flag)
					{
						StaffRollScroll.dataList.Add(data);
					}
				}
			}
		}
	}

	private void CreateLabels()
	{
		GameObject gameObject = null;
		for (int i = 0; i < StaffRollScroll.dataList.Count; i++)
		{
			StaffRollScroll.Data data = StaffRollScroll.dataList[i];
			if (!GameMain.Instance.CharacterMgr.status.lockUserDraftMaid || !data.userName)
			{
				GameObject original;
				if (data.type == StaffRollScroll.Data.Type.Logo)
				{
					original = this.prefabLabelLogo;
				}
				else if (data.name == string.Empty || data.type == StaffRollScroll.Data.Type.Small1)
				{
					original = this.prefabLabelSmall1;
				}
				else if (data.type == StaffRollScroll.Data.Type.Small2)
				{
					original = this.prefabLabelSmall2;
				}
				else
				{
					original = this.prefabLabel;
				}
				GameObject gameObject2 = UnityEngine.Object.Instantiate<GameObject>(original);
				gameObject2.transform.parent = base.gameObject.transform;
				gameObject2.transform.localScale = new Vector3(1f, 1f, 1f);
				if (data.type != StaffRollScroll.Data.Type.Logo)
				{
					UILabel component = gameObject2.GetComponent<UILabel>();
					component.text = data.name;
				}
				gameObject2.SetActive(true);
				if (data.stopPoint)
				{
					gameObject = gameObject2;
				}
				if (i >= StaffRollScroll.dataList.Count - 1 && gameObject == null)
				{
					gameObject = gameObject2;
				}
			}
		}
		this.prefabLabel.SetActive(false);
		this.prefabLabelSmall1.SetActive(false);
		this.prefabLabelSmall2.SetActive(false);
		this.prefabLabelLogo.SetActive(false);
		this.table.Reposition();
		if (gameObject != null)
		{
			this.endPosY = (float)((int)gameObject.transform.localPosition.y);
		}
	}

	[SerializeField]
	private StaffRollImageCtrl imgCtrl;

	[SerializeField]
	private GameObject prefabLabel;

	[SerializeField]
	private GameObject prefabLabelSmall1;

	[SerializeField]
	private GameObject prefabLabelSmall2;

	[SerializeField]
	private GameObject prefabLabelLogo;

	[SerializeField]
	private UITable table;

	[SerializeField]
	private float scrollTime = 15f;

	private float progressTime;

	private float endPosY;

	private StaffRollScroll.Mode mode;

	private string soundFileName;

	private bool finish;

	private static List<StaffRollScroll.Data> dataList;

	public enum Mode
	{
		Wait,
		Scroll,
		EndReady,
		End
	}

	public class Data
	{
		public string name;

		public StaffRollScroll.Data.Type type;

		public bool userName;

		public bool stopPoint;

		public enum Type
		{
			Normal,
			Small1,
			Small2,
			Logo
		}
	}
}
