using CommonLang;
using CommonLang.IO;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.IO;
using XmdsCommonServer.XLS.Data;

namespace XmdsCommonServer.XLS
{
	public class XLSRandomMonsterSkillLoader : XLSLoader
	{
        public enum MonsterRandomSkillType : int
        {
            None                = 0,
            OnlyActive          = 1,    //仅主动
            OnlyPassive         = 2,    //仅被动
            //Active_Passive      = 3,    //主动 & 被动
        }

        private HashMap<int, MonsterSkills> monsterSkills = new HashMap<int, MonsterSkills>();

        //默认的基础概率信息
        MonsterSkills defaultSkills;

        public XLSRandomMonsterSkillLoader(string path)
		{
			byte[] data = Resource.LoadData(path);

			if (data == null)
			{
				throw new Exception("Can not read xls file : " + path);
			}

			using (MemoryStream ms = new MemoryStream(data))
			{
				IWorkbook Workbook = null;
				if (path.Contains(".xlsx"))
				{
					Workbook = new XSSFWorkbook(ms);
				}
				else if (path.Contains(".xls"))
				{
					Workbook = new HSSFWorkbook(ms);
				}

				for (int si = 0; si < Workbook.NumberOfSheets; si++)
				{
					ISheet sheet = Workbook.GetSheetAt(si) as ISheet;
					try
					{
						if (sheet.SheetName == "MonsterSkills")
						{
							LoadSheet(sheet);
						}
					}
					catch (Exception error)
					{
						throw new Exception(string.Format("XLSRandomMonsterSkillLoader 初始化怪物配置错误SheetName = {0},Error = {1}",
							sheet.SheetName, error.ToString()));
					}
				}

			}

			log.Info("XLSRandomMonsterSkillLoader 初始化怪物配置完成.");
		}

		private void LoadSheet(ISheet sheet)
		{
			int index = 0;
			try
			{
				foreach (MonsterSkills m in LoadSheet<MonsterSkills>(sheet))
				{
                    monsterSkills.Add(m.MonsterID, m);
					index++;

                    if(m.MonsterID == 0)
                    {
                        defaultSkills = m;
                    }
				}
			}
			catch (Exception error)
			{
				throw new Exception(string.Format("XLSRandomMonsterSkillLoader Error : index  = {0} Error = {1}", index, error.ToString()));
			}

			log.Info(string.Format("loadSheet【{0}】Complete", sheet.SheetName));
		}

		public MonsterSkills GetMonsterSkillInfo(int monsterId)
		{
			return this.monsterSkills.Get(monsterId);
		}

        public MonsterSkills GetMonsterSkillInfo()
        {
            return defaultSkills;
        }
    }
}