#include "IDAReplayObserver.h"
#include "Util.h"
#include <pybind11/pybind11.h>


void IDAReplayObserver::setUnits()
{
	m_allUnits.clear();
	for (auto & unit : Observation()->GetUnits())
	{
		m_allUnits.push_back(ReplayUnit(unit, *this));
	}
}

IDAReplayObserver::IDAReplayObserver():
	sc2::ReplayObserver()
{
}

void IDAReplayObserver::OnGameStart()
{
	setUnits();
}

void IDAReplayObserver::OnStep()
{
	setUnits();
}

void IDAReplayObserver::OnGameEnd()
{
}

void IDAReplayObserver::OnUnitDestroyed(const sc2::Unit* unit)
{
	ReplayUnit unitInformation = ReplayUnit(unit, *this);
	OnReplayUnitDestroyed(&unitInformation);
}

void IDAReplayObserver::OnReplayUnitDestroyed(const ReplayUnit *)
{
	
}

void IDAReplayObserver::OnUnitCreated(const sc2::Unit * unit)
{
	ReplayUnit unitInformation = ReplayUnit(unit, *this);
	std::cout << "OnUnitCreated" << std::endl;
	OnReplayUnitCreated(&unitInformation);
}

void IDAReplayObserver::OnReplayUnitCreated(const ReplayUnit *)
{
}

void IDAReplayObserver::OnBuildingConstructionComplete(const sc2::Unit *unit)
{
	ReplayUnit unitInformation = ReplayUnit(unit, *this);
	std::cout << "OnBuildingConstructionComplete" << std::endl;
	OnReplayUnitCreated(&unitInformation);
}




ReplayUnit IDAReplayObserver::GetUnit(const CCUnitID tag) const
{		
	return ReplayUnit(Observation()->GetUnit(tag), *(IDAReplayObserver *)this);
}






const std::vector<ReplayUnit>& IDAReplayObserver::GetAllUnits() const
{

	return m_allUnits;
}

CCRace IDAReplayObserver::GetPlayerRace(int player)
{	
	return ReplayControl()->GetReplayInfo().players[player].race;
}

std::string IDAReplayObserver::GetReplayPath()
{
	return ReplayControl()->GetReplayInfo().replay_path;
}

sc2::GameResult IDAReplayObserver::GetResultForPlayer(int player)
{
	return ReplayControl()->GetReplayInfo().players[player].game_result;
}