#pragma once

#include "sdkexport.h"
#include "MoveInstruction.h"
#include <string>
#include <vector>

namespace mpl {

namespace sdk {
class TypeConversions;
}

class MPL_API PathOperation {
public:
    PathOperation() = delete;
    ~PathOperation();
    PathOperation(const PathOperation&) = default;
    PathOperation& operator=(const PathOperation&) = default;
    PathOperation(PathOperation&&) = default;
    PathOperation& operator=(PathOperation&&) = default;
    
    unsigned getId() const;

    const std::string& getName() const;

    bool isEmpty() const;

    std::vector<MoveInstruction> getMoveInstructions() const;
    
    std::string getComment() const;
    
    void setComment(const std::string& comment);

    void replace(const std::vector<AnnotatedPose>& annotatedPoses);

private:
    friend class sdk::TypeConversions;

    explicit PathOperation(void* impl);

    void* pImpl;
};

}
