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

public class VoiceDictionaries
{
	public VoiceDictionary playVoices;

	public VoiceDictionary evoVoices;

	public VoiceDictionary atkVoices;

	public VoiceDictionary evoAtkVoices;

	public VoiceDictionary destroyVoices;

	public VoiceDictionary evoDestroyVoices;

	public List<VoiceDictionary> skillVoices;

	public List<VoiceDictionary> evoSkillVoices;

	public List<VoiceDictionary> attachSkillVoices;

	private const string UNDER_BAR = "_";

	public string VoiceId { get; private set; }

	public VoiceDictionaries(int cardId, CardMaster.CardMasterId cardMasterId)
	{
		CardParameter cardParameterFromId = CardMaster.GetInstance(cardMasterId).GetCardParameterFromId(cardId);
		if (cardParameterFromId != null)
		{
			VoiceDictionary.SettingVoiceData(ref playVoices, (cardParameterFromId.PlayVoice != null) ? cardParameterFromId.PlayVoice : "");
			VoiceDictionary.SettingVoiceData(ref evoVoices, (cardParameterFromId.EvoVoice != null) ? cardParameterFromId.EvoVoice : "");
			VoiceDictionary.SettingVoiceData(ref atkVoices, ref evoAtkVoices, (cardParameterFromId.AtkVoice != null) ? cardParameterFromId.AtkVoice : "");
			VoiceDictionary.SettingVoiceData(ref destroyVoices, ref evoDestroyVoices, (cardParameterFromId.DestroyVoice != null) ? cardParameterFromId.DestroyVoice : "");
			VoiceDictionary.SettingVoiceDataList(out skillVoices, out evoSkillVoices, (cardParameterFromId.SkillVoice != null) ? cardParameterFromId.SkillVoice : "");
		}
		attachSkillVoices = new List<VoiceDictionary>();
		VoiceId = GetVoiceId();
	}

	private bool GetVoiceIDBeforeUnderBar(VoiceDictionary dic, ref string retVoiceID)
	{
		string[] allVoiceList = dic.GetAllVoiceList();
		if (allVoiceList.Length == 0)
		{
			return false;
		}
		if (string.IsNullOrEmpty(allVoiceList[0]))
		{
			return false;
		}
		string text = allVoiceList.FirstOrDefault((string v) => v != "NONE".ToLower());
		if (text == null)
		{
			return false;
		}
		retVoiceID = text.Split(new string[1] { "_" }, StringSplitOptions.None)[0];
		return true;
	}

	private bool GetVoiceIDListBeforeUnderBar(List<VoiceDictionary> dicList, ref string retVoiceID)
	{
		if (dicList != null && dicList.Count > 0)
		{
			for (int i = 0; i < dicList.Count; i++)
			{
				if (GetVoiceIDBeforeUnderBar(dicList[i], ref retVoiceID))
				{
					return true;
				}
			}
		}
		return false;
	}

	private string GetVoiceId()
	{
		string retVoiceID = "";
		if (GetVoiceIDBeforeUnderBar(playVoices, ref retVoiceID))
		{
			return retVoiceID;
		}
		if (GetVoiceIDBeforeUnderBar(evoVoices, ref retVoiceID))
		{
			return retVoiceID;
		}
		if (GetVoiceIDBeforeUnderBar(atkVoices, ref retVoiceID))
		{
			return retVoiceID;
		}
		if (GetVoiceIDBeforeUnderBar(evoAtkVoices, ref retVoiceID))
		{
			return retVoiceID;
		}
		if (GetVoiceIDBeforeUnderBar(destroyVoices, ref retVoiceID))
		{
			return retVoiceID;
		}
		if (GetVoiceIDBeforeUnderBar(evoDestroyVoices, ref retVoiceID))
		{
			return retVoiceID;
		}
		if (GetVoiceIDListBeforeUnderBar(skillVoices, ref retVoiceID))
		{
			return retVoiceID;
		}
		if (GetVoiceIDListBeforeUnderBar(evoSkillVoices, ref retVoiceID))
		{
			return retVoiceID;
		}
		GetVoiceIDListBeforeUnderBar(attachSkillVoices, ref retVoiceID);
		return retVoiceID;
	}

	public List<string> GetNormalPlayVoices()
	{
		List<string> list = playVoices.GetAllVoiceList().ToList();
		List<string> list2 = new List<string>();
		for (int i = 0; i < list.Count; i++)
		{
			string text = list.ElementAt(i);
			if ((text.Contains("_ub") || text.Contains("_sb") || text.Contains("_ssb")) && !text.Contains("_ubp") && !text.Contains("_sbp") && !text.Contains("_ssbp"))
			{
				if (text.Contains("_ubl"))
				{
					list[i] = list[i].Replace("_ubl", "_ub");
				}
				else if (text.Contains("_sbl"))
				{
					list[i] = list[i].Replace("_sbl", "_sb");
				}
				else if (text.Contains("_ssbl"))
				{
					list[i] = list[i].Replace("_ssbl", "_ssb");
				}
				else
				{
					list2.Add(text);
				}
			}
		}
		foreach (string item in list2)
		{
			list.Remove(item);
		}
		return list;
	}
}
