#pragma once

#include "sdkexport.h"
#include "Pose.h"
#include "ExtJoint.h"
#include <string>

namespace mpl {

namespace sdk {
class TypeConversions;
}

class MPL_API Wobjdata {
private:
    const void* pimpl = nullptr;

public:
    Wobjdata() = delete;
    ~Wobjdata();
    Wobjdata(const Wobjdata&) = default;
    Wobjdata& operator=(const Wobjdata&) = default;
    Wobjdata(Wobjdata&&) = default;
    Wobjdata& operator=(Wobjdata&&) = default;

    unsigned getId() const;
    std::string getName() const;

    bool isRobhold() const;
    bool isUfprog() const;

    std::string getUfmec() const;

    Pose getUframe() const;
    Pose getOframe() const;

    Pose getActualWorldPose() const;
    Pose getActualWorldPose(const ExtJoint& ej) const;

    Pose getActualTaskPose() const;
    Pose getActualTaskPose(const ExtJoint& ej) const;

    std::string toString() const;

private:
    friend class sdk::TypeConversions;

    explicit Wobjdata(const void* impl);
};

}
