#pragma once
#include <vector>
#include <libsumo/TraCIDefs.h>
#ifndef LIBTRACI
class NamedRTree;
class PointOfInterest;
class PositionVector;
#endif
namespace LIBSUMO_NAMESPACE {
class POI {
public:
static std::string getType(const std::string& poiID);
static libsumo::TraCIPosition getPosition(const std::string& poiID, const bool includeZ = false);
static libsumo::TraCIColor getColor(const std::string& poiID);
static double getWidth(const std::string& poiID);
static double getHeight(const std::string& poiID);
static double getAngle(const std::string& poiID);
static std::string getImageFile(const std::string& poiID);
LIBSUMO_ID_PARAMETER_API
LIBSUMO_SUBSCRIPTION_API
static void setType(const std::string& poiID, const std::string& poiType);
static void setColor(const std::string& poiID, const libsumo::TraCIColor& color);
static void setPosition(const std::string& poiID, double x, double y);
static void setWidth(const std::string& poiID, double width);
static void setHeight(const std::string& poiID, double height);
static void setAngle(const std::string& poiID, double angle);
static void setImageFile(const std::string& poiID, const std::string& imageFile);
static bool add(const std::string& poiID, double x, double y, const libsumo::TraCIColor& color,
const std::string& poiType = "", int layer = 0, const std::string& imgFile = "",
double width = 1, double height = 1, double angle = 0, const std::string& icon = "");
static bool remove(const std::string& poiID, int layer = 0);
static void highlight(const std::string& poiID, const libsumo::TraCIColor& col = libsumo::TraCIColor(255, 0, 0, 255),
double size = -1, const int alphaMax = -1, const double duration = -1, const int type = 0);
#ifndef LIBTRACI
#ifndef SWIG
static NamedRTree* getTree();
static void cleanup();
static void storeShape(const std::string& id, PositionVector& shape);
static std::shared_ptr<VariableWrapper> makeWrapper();
static bool handleVariable(const std::string& objID, const int variable, VariableWrapper* wrapper, tcpip::Storage* paramData);
private:
static PointOfInterest* getPoI(const std::string& id);
private:
static SubscriptionResults mySubscriptionResults;
static ContextSubscriptionResults myContextSubscriptionResults;
static NamedRTree* myTree;
#endif
#endif
POI() = delete;
};
}