using CommonAI.Data;
using CommonAI.RTS.Manhattan;
using CommonAI.Zone;
using CommonAI.Zone.Helper;
using CommonLang;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//using System.Threading.Tasks;

namespace CommonAI.ZoneServer.JSGModule
{
	class AstarManhattanCache
	{
		public class AStartCacheData
		{
			public ZoneManhattanMap mManhattanMap;
			public AstarManhattan mAstartManhattan;
		}

		private static readonly HashMap<int, List<AStartCacheData>> mCacheAstar = new HashMap<int, List<AStartCacheData>>();

		public static void CacheSceneAstart(int sceneID, ZoneInfo info, TerrainDefinitionMap terrainMap, SceneType type)
		{
			List<AStartCacheData> astarList = mCacheAstar.Get(sceneID);
			if(astarList == null)
			{
				astarList = new List<AStartCacheData>(1);
				mCacheAstar.Put(sceneID, astarList);
			}

			AStartCacheData cacheTemp = new AStartCacheData();
			cacheTemp.mManhattanMap = new ZoneManhattanMap(info.Clone() as ZoneInfo, terrainMap);
			cacheTemp.mAstartManhattan = new AstarManhattan(cacheTemp.mManhattanMap, true, JSGModule.GetSpaceDiveSize(type));
			astarList.Add(cacheTemp);
		}

		public static AStartCacheData GetCacheAStart(int sceneID)
		{
			List<AStartCacheData> astarList = mCacheAstar.Get(sceneID);
			if (astarList != null && astarList.Count > 0)
			{
				AStartCacheData result = astarList[0];
				astarList.RemoveAt(0);
				if(astarList.Count <= 0)
				{
					mCacheAstar.Remove(sceneID);
				}

				return result;
			}

			return null;
		}


	}
}