using System;
using System.Collections.Generic;
using System.Linq;

public class VoiceDictionary
{

	private VoiceAndWaitTime[] _parsedVoice;

	private string[] _allVoiceID;

	private VoiceAndWaitTime _normalVoice;

	private List<VoiceAndWaitTime> _fixedUseCostVoice = new List<VoiceAndWaitTime>();

	private List<VoiceAndWaitTime> _unionBurstVoice = new List<VoiceAndWaitTime>();

	private List<VoiceAndWaitTime> _skyboundArtVoice = new List<VoiceAndWaitTime>();

	private List<VoiceAndWaitTime> _superSkyboundArtVoice = new List<VoiceAndWaitTime>();

	private VoiceAndWaitTime _earthRiteVoice;

	private VoiceAndWaitTime _summonTokenVoice;

	public List<int> EnemyComvoList { get; private set; }

	public List<int> AllyComvoList { get; private set; }

	public VoiceDictionary(string voice)
	{
		EnemyComvoList = new List<int>();
		AllyComvoList = new List<int>();
		_parsedVoice = new VoiceAndWaitTime[0];
		_allVoiceID = new string[0];
		Initialize(voice);
	}

	private void Initialize(string voiceStr)
	{
		if (string.IsNullOrEmpty(voiceStr))
		{
			return;
		}
		string[] array = voiceStr.Split(new string[1] { "," }, StringSplitOptions.None);
		_parsedVoice = new VoiceAndWaitTime[array.Count()];
		_allVoiceID = new string[array.Count()];
		string text = "";
		int i = 0;
		for (int num = array.Length; i < num; i++)
		{
			text = array[i];
			_parsedVoice[i] = ExtractionVoice(text);
			_allVoiceID[i] = _parsedVoice[i].Voice;
			if (IsConvVoice(text))
			{
				string[] array2 = text.Split(new string[1] { "_" }, StringSplitOptions.None);
				int num2 = array2.Length - 1;
				int item = int.Parse(array2[num2]);
				if (text.Contains("_4_") || text.Contains("_7_"))
				{
					EnemyComvoList.Add(item);
				}
				else
				{
					AllyComvoList.Add(item);
				}
			}
			if (_normalVoice == null && IsNormalVoice(text))
			{
				_normalVoice = _parsedVoice[i];
			}
			if (_unionBurstVoice != null && IsUnionBurstVoice(text))
			{
				_unionBurstVoice.Add(_parsedVoice[i]);
			}
			if (_skyboundArtVoice != null && IsSkyboundArtVoice(text))
			{
				_skyboundArtVoice.Add(_parsedVoice[i]);
			}
			if (_superSkyboundArtVoice != null && IsSuperSkyboundArtVoice(text))
			{
				_superSkyboundArtVoice.Add(_parsedVoice[i]);
			}
			if (IsFixedUseCostVoice(text))
			{
				_fixedUseCostVoice.Add(_parsedVoice[i]);
			}
			if (_earthRiteVoice == null && IsEarthRiteVoice(text))
			{
				_earthRiteVoice = _parsedVoice[i];
			}
			if (_summonTokenVoice == null && IsSummonTokenVoice(text))
			{
				_summonTokenVoice = _parsedVoice[i];
			}
		}
	}

	public static void SettingVoiceData(ref VoiceDictionary normal, ref VoiceDictionary evolution, string voice)
	{
		List<string> list = voice.Split(new string[1] { "//" }, StringSplitOptions.None).ToList();
		if (list.Count > 1)
		{
			normal = new VoiceDictionary(list[0]);
			evolution = new VoiceDictionary(list[1]);
		}
		else if (list.Count == 1 && list[0] != "")
		{
			normal = new VoiceDictionary(list[0]);
			evolution = new VoiceDictionary(string.Empty);
		}
		else
		{
			normal = new VoiceDictionary(string.Empty);
			evolution = new VoiceDictionary(string.Empty);
		}
	}

	public static void SettingVoiceDataList(out List<VoiceDictionary> normal, out List<VoiceDictionary> evolution, string voice)
	{
		if (voice.IndexOf("//") == 0)
		{
			voice.Insert(0, "none");
		}
		List<string> list = voice.Split(new string[1] { "//" }, StringSplitOptions.None).ToList();
		if (list.Count > 1)
		{
			normal = CreateVoiceDataList(list[0]);
			evolution = CreateVoiceDataList(list[1]);
		}
		else if (list.Count == 1 && list[0] != "")
		{
			normal = CreateVoiceDataList(list[0]);
			evolution = CreateVoiceDataList(string.Empty);
		}
		else
		{
			normal = CreateVoiceDataList(string.Empty);
			evolution = CreateVoiceDataList(string.Empty);
		}
	}

	private static List<VoiceDictionary> CreateVoiceDataList(string voice)
	{
		if (voice == string.Empty)
		{
			return null;
		}
		List<string> list = voice.Split(new string[1] { "," }, StringSplitOptions.None).ToList();
		List<VoiceDictionary> list2 = null;
		if (list.Count > 0)
		{
			list2 = new List<VoiceDictionary>();
			for (int i = 0; i < list.Count; i++)
			{
				list2.Add(new VoiceDictionary(list[i]));
			}
		}
		return list2;
	}

	public static void SettingVoiceData(ref VoiceDictionary normal, string voice)
	{
		List<string> list = voice.Split(new string[1] { "//" }, StringSplitOptions.None).ToList();
		if (list.Count >= 1 && list[0] != "")
		{
			normal = new VoiceDictionary(list[0]);
		}
		else
		{
			normal = new VoiceDictionary(string.Empty);
		}
	}

	public string[] GetAllVoiceList()
	{
		return _allVoiceID;
	}

	private bool IsNormalVoice(string voiceName)
	{
		if (!IsConvVoice(voiceName) && !IsFixedUseCostVoice(voiceName) && !IsUnionBurstVoice(voiceName) && !IsSkyboundArtVoice(voiceName) && !IsSuperSkyboundArtVoice(voiceName) && !IsEarthRiteVoice(voiceName))
		{
			return !IsSummonTokenVoice(voiceName);
		}
		return false;
	}

	private bool IsConvVoice(string voiceName)
	{
		if (voiceName.Contains("_4_"))
		{
			string[] array = voiceName.Split(new string[1] { "_" }, StringSplitOptions.None);
			int result = 0;
			int num = array.Length - 1;
			if (array.Length > 2 && array[num].Length == 9)
			{
				return int.TryParse(array[num], out result);
			}
			return false;
		}
		if (!voiceName.Contains("_8_"))
		{
			return voiceName.Contains("_7_");
		}
		return true;
	}

	private bool IsFixedUseCostVoice(string voiceName)
	{
		return voiceName.Contains("_enh");
	}

	private bool IsUnionBurstVoice(string voiceName)
	{
		return voiceName.Contains("_ub");
	}

	private bool IsSkyboundArtVoice(string voiceName)
	{
		return voiceName.Contains("_sb");
	}

	private bool IsSuperSkyboundArtVoice(string voiceName)
	{
		return voiceName.Contains("_ssb");
	}

	private bool IsEarthRiteVoice(string voiceName)
	{
		return voiceName.Contains("_ear");
	}

	private bool IsSummonTokenVoice(string voiceName)
	{
		return voiceName.EndsWith("_11");
	}

	private VoiceAndWaitTime ExtractionVoice(string order)
	{
		string text = order;
		float waitTime = 0f;
		if (text.Contains("{"))
		{
			List<string> list = text.Split(new string[1] { "{" }, StringSplitOptions.None).ToList();
			waitTime = float.Parse(list[1].Replace("}", ""));
			text = list[0];
		}
		return new VoiceAndWaitTime(text, waitTime);
	}
}
