using System;
using System.Collections.Generic;
using System.Text;

using Thousandto.Core.Base;
using SceneEditor.Proxy.Plugin;

namespace Thousandto.Code.Logic
{
    /// <summary>
    /// 世界地图数据管理器
    /// </summary>
    public class WorldMapInfoManager
    {
        //世界地图数据
        private WorldMapInfoData _data = null;

        //世界地图数据
        public WorldMapInfoData Data
        {
            get
            {
                return _data;
            }
        }
        //世界地图数据文件路径
        public string WorldMapDataFilePath
        {
            get
            {
                return FileUtils.MapInfoDirPath + "/Minimap/" + MapInfoConstDefine.WorldMapDataFileName;
            }
        }

        //获取MiniMap数据信息
        public MiniMapInfoData GetMiniMapInfo(string mapName)
        {
            if (Data.MiniMapDict.ContainsKey(mapName))
            {
                return Data.MiniMapDict[mapName];
            }
            return null;
        }

        public void Initialize()
        {
            WorldMapDataSerializer.ReadWorldMap(WorldMapDataFilePath,x=> {
                _data = x;
            });
        }

        //设置World地图信息数据
        public void SetWorldMapInfo(float mapSizeX, float mapSizeZ, float scale, float tempdata)
        {
            if (Data != null)
            {
                Data.Size = new UnityEngine.Vector2(mapSizeX, mapSizeZ);
                Data.WorldMapScale = scale;
                Data.TempData = tempdata;
                Save();
            }
        }

        //设置Mini地图数据学习你
        public void SetMiniMapInfo(string mapName, float mapSizeX,float mapSizeZ,float mapCameraPosX,float mapCameraPosZ)
        {
            if (Data != null)
            {
                if (Data.MiniMapDict.ContainsKey(mapName))
                {
                    Data.MiniMapDict[mapName].Size = new UnityEngine.Vector2(mapSizeX, mapSizeZ);
                    Data.MiniMapDict[mapName].CameraPosition = new UnityEngine.Vector2(mapCameraPosX, mapCameraPosZ);
                }
                else
                {
                    Data.MiniMapDict[mapName] = new MiniMapInfoData()
                    {
                        MapName = mapName,
                        Size = new UnityEngine.Vector2(mapSizeX, mapSizeZ),
                        CameraPosition = new UnityEngine.Vector2(mapCameraPosX, mapCameraPosZ)
                    };                    
                }
                Save();
            }            
        }

        //保存
        private void Save()
        {
            if (_data != null)
            {
                WorldMapDataSerializer.WriteWorldMap(WorldMapDataFilePath, _data);
            }
        }
    }
}