#pragma once
#include "CppScripts.h"

struct DigInfo {
	LOT digLot; // The lot of the chest
	LOT spawnLot; // Option lot of pet to spawn
	int32_t requiredMission; // Optional mission required before pet can be spawned, if < 0 == don't use
	bool specificPet; // This treasure requires a specific pet to be dug up
	bool xBuild; // This treasure is retrieved from a buildable cross
	bool bouncer; // This treasure spawns a bouncer
	bool builderOnly; // Only the builder of this diggable may access the rewards, for example with crosses
};

class PetDigServer : public CppScripts::Script
{
public:
	void OnStartup(Entity* self) override;
	void OnDie(Entity* self, Entity* killer) override;

	static Entity* GetClosestTreasure(NiPoint3 position);

private:
	static void ProgressPetDigMissions(const Entity* owner, const Entity* chest);
	static void SpawnPet(Entity* self, const Entity* owner, DigInfo digInfo);
	static void HandleXBuildDig(const Entity* self, Entity* owner, Entity* pet);
	static void HandleBouncerDig(const Entity* self, const Entity* owner);
	static std::vector<LWOOBJID> treasures;
	static const DigInfo defaultDigInfo;
	static const std::map<LOT, DigInfo> digInfoMap;
};
