#pragma once

#include "AbstractVisualNode.h"

#include <memory>

class BlochSphere;
class CircleNode;
class LineNode;

class BlochSphereNode : public AbstractVisualNode
{
public:
    BlochSphereNode(const Point& location);

    void setContent(BlochSphere* content);

    void update(SceneInfo* sceneInfo) override;

    void setSize(double size);
private:
    double mSize{ 1.0 };
    bool mContentDirty{ true };
    BlochSphere* mContent{ nullptr };

    std::unique_ptr<CircleNode> mOuterCircle;
    std::unique_ptr<CircleNode> mInnerCircle;
    std::unique_ptr<CircleNode> mCentreCircle;
    std::unique_ptr<CircleNode> mStateMarkerCircle;
    std::unique_ptr<LineNode> mXAxis;
    std::unique_ptr<LineNode> mYAxis;
    std::unique_ptr<LineNode> mZAxis;
    std::unique_ptr<LineNode> mStateVector;
};
