#pragma once

#include "Common.h"

#include "UnitData.h"
#include "BuildOrderQueue.h"
#include "InformationManager.h"
#include "WorkerManager.h"
#include "BuildManager.h"
#include "ConstructionManager.h"
#include "ScoutManager.h"
#include "StrategyManager.h"

namespace MyBot
{
	class Strategy_InitialBuildOrderManager {
		Strategy_InitialBuildOrderManager();
	public:
		/// static singleton 객체를 리턴합니다
		static Strategy_InitialBuildOrderManager &	Instance();

		void setInitialBuildOrder();


		void fillBuildOrder_Zerg_Build_Test();

		// 4드론, 5드론
		void fillBuildOrder_Zerg_Build_4Drone_Spawing_Pool();
		void fillBuildOrder_Zerg_5Drone_Spawing_Pool();


		/// 9드론 스포닝풀 앞마당 해처리
		void fillBuildOrder_Zerg_Build_12Drone_SpawningPool_2Hatchery();

		/// 대저그전에서 사용 : 9드론 스포닝풀 짓고 1해처리로 대응
		void fillBuildOrder_Zerg_Build_9Drone_SpawningPool_1Hatchery();

		/// 대저그전에서 사용 : 9드론 스포닝풀 짓고 1해처리로 바로 뮤탈 가는 것 
		void fillBuildOrder_Zerg_Build_9Drone_SpawningPool_1Hatchery_Fast_Mutal();

		/// 대프로토스전에서 사용 : 9드론 앞마당 해처리 짓고 저글링 뽑으며 방어하는 것
		void fillBuildOrder_Zerg_Build_9Drone_Hatchery();

		/// 대프로토스전에서 사용 : 9드론 스포닝풀 짓고 앞마당 2해처리로 저글링 뽑으며 뮤탈 가는 것. 저글링 컨트롤 없이는 방어안됨
		void fillBuildOrder_Zerg_Build_9Drone_SpawningPool_Expansion_2Hatchery_Fast_Mutal();

		/// 대프로토스전에서 사용 : 9드론 스포닝풀 짓고 트윈 해처리로 저글링 뽑으며 뮤탈 가는 것
		void fillBuildOrder_Zerg_Build_9Drone_SpawningPool_TwinHatchery_Mutal();

		/// 대프로토스전에서 사용 : 12드론 트윈 해처리. 초반에 위험
		void fillBuildOrder_Zerg_Build_12Drone_TwinHatchery_HydraLurker();
		
		/// 대테란전에서 사용 : 9드론 스포닝풀 가난한 뮤탈
		void fillBuildOrder_Zerg_Build_9Drone_SpawningPool_2Hatchery_Fast_Mutal();

		/// 대테란전에서 사용 : 12드론 앞마당 해처리 짓고 조금 더 부유하게 저글링과 성큰만으로 수비하며 뮤탈 가는 것
		/// 뮤탈이 조금 늦게 나옴
		void fillBuildOrder_Zerg_Build_12Drone_2Hatchery_Fast_Mutal();

		/// 대테란전에서 사용 : 12드론 스포닝풀 가스 먼저 짓고 앞마당 해처리 짓고 저글링 4마리, 앞마당 성큰 1개로 초반 방어
		/// 더 빠른 뮤탈 가는 것 
		void fillBuildOrder_Zerg_Build_12Drone_SpawningPool_2Hatchery_Fast_Mutal();

		void fillBuildOrder_Zerg_11DroneHydra();
		void fillBuildOrder_Zerg_11DroneMutal();
		void fillBuildOrder_Zerg_11Drone2Hatchery();
		void fillBuildOrder_Zerg_12DroneFirstExpansion();
		void fillBuildOrder_Zerg_12DroneFirstExpansionGoMutal();


	};
}