#pragma once

#include "sdkexport.h"
#include "Pose.h"
#include <QObject>

class TopoDS_Face;
class TopoDS_Edge;

namespace mpl {

// map中每项的定义: (id, vec)，其中id是点云对象的id; vec是选择的点的序号集合
using PointCloudResults = std::unordered_map<unsigned, std::vector<size_t>>;

class MPL_API SignalProxy : public QObject {
    Q_OBJECT

public:
    static SignalProxy* Get();

private:
    SignalProxy();

signals:
    void customOperationMenuClicked(unsigned menuIndex, unsigned operationId);

    void faceClicked(unsigned bodyId, unsigned faceIndex, const TopoDS_Face& face, int btn, int modifiers);
    void edgeClicked(unsigned bodyId, const TopoDS_Edge& edge, int btn, int modifiers);
    void nothingClicked(int btn, int modifiers);

    void snapPositionChanged(const Pos& pointWorldPos);

    void pointCloudSelected(const mpl::PointCloudResults* results);

};

}
