using UnityEngine;
using System.Collections.Generic;
using Thousandto.Editor.Excel;
using Thousandto.Code.Logic;
using Thousandto.Core.Asset;

namespace Thousandto.Editor.ModelEditor
{
    //模型编辑器数据管理器
    public static class ModelDataManager
    {
        private static Dictionary<int, ModelData> _dataTable = null;
        private static ExcelInfo _curExcelInfo = null;
        public static Dictionary<int, ModelData> DataTable
        {
            get
            {
                return _dataTable;
            }
        }
        public static void Load()
        {
            var path = "../../Gamedata/Config/client/ModelConfig.xlsx";
            var excelInfo = ExcelReader.Read(path);
            if (excelInfo == null)
                return;
            _curExcelInfo = excelInfo;
            _dataTable = new Dictionary<int, ModelData>(excelInfo.IdValuesTable.Count);
            var iter = excelInfo.IdValuesTable.GetEnumerator();
            try
            {
                while (iter.MoveNext())
                {
                    var modelData = new ModelData(iter.Current.Key, excelInfo);
                    _dataTable.Add(modelData.CfgID, modelData);
                }
            }
            finally
            {
                iter.Dispose();
            }
        }

        public static void Save()
        {
            if (_dataTable == null)
                return;
            if (_curExcelInfo == null)
                return;
            var iter = _dataTable.GetEnumerator();
            try
            {
                while(iter.MoveNext())
                {
                    iter.Current.Value.SaveToExcel();
                }
            }
            finally
            {
                iter.Dispose();
            }
            var path = "../../Gamedata/Config/client/ModelConfig.xlsx";
            ExcelWriter.Write(path, _curExcelInfo);
        }

        //从表格中获取模型类型
        public static ModelTypeCode GetModelType(RoleSkinModelType type)
        {
            switch (type)
            {
                case RoleSkinModelType.PlayerBody://角色身体
                    return ModelTypeCode.Player;
                case RoleSkinModelType.PlayerWeapon://武器
                    return ModelTypeCode.Weapon;
                case RoleSkinModelType.GodWeapon://神兵武器
                    return ModelTypeCode.GodWeapon;
                case RoleSkinModelType.PlayerWing: //翅膀
                    return ModelTypeCode.Wing;
                case RoleSkinModelType.PlayerMount://角色坐骑
                    return ModelTypeCode.Mount;
                case RoleSkinModelType.MonsterBody://怪物,npc主体
                    return ModelTypeCode.Monster;
                case RoleSkinModelType.CollectionBody://采集物主体
                    return ModelTypeCode.Object;
                case RoleSkinModelType.PlayerStrengthenVfx://角色强化特效
                    return ModelTypeCode.StrengthenVfx;
                case RoleSkinModelType.DrapItem:       //用于展示的武器
                    return ModelTypeCode.Object;
                case RoleSkinModelType.GodWeaponVfx:
                    return ModelTypeCode.WeaponVFX;
                default:
                    return ModelTypeCode.Object;
            }
        }
        //从表格中获取模型类型
        public static ModelTypeCode GetVfxModelType(RoleSkinModelType type)
        {
            switch (type)
            {
                case RoleSkinModelType.PlayerBody://角色身体
                    return ModelTypeCode.BodyVFX;
                case RoleSkinModelType.PlayerWeapon://武器
                case RoleSkinModelType.GodWeapon://神兵武器
                    return ModelTypeCode.WeaponVFX;
                case RoleSkinModelType.PlayerWing: //翅膀
                    return ModelTypeCode.WingVFX;
                case RoleSkinModelType.PlayerMount://角色坐骑
                    return ModelTypeCode.MountVFX;
                case RoleSkinModelType.MonsterBody://怪物,npc主体
                    return ModelTypeCode.MonsterVFX;
                case RoleSkinModelType.CollectionBody://采集物主体
                    return ModelTypeCode.CollectionVFX;
                case RoleSkinModelType.PlayerStrengthenVfx://角色强化特效
                    return ModelTypeCode.BodyVFX;
                case RoleSkinModelType.DrapItem:       //用于展示的武器
                    return ModelTypeCode.OtherVFX;
                default:
                    return ModelTypeCode.OtherVFX;
            }
        }

        public static void Clear()
        {
            if (_dataTable != null)
            {
                _dataTable.Clear();
            }
            _dataTable = null;
        }
    }
}