#pragma once

#include <memory>
#include <vector>

class INativeDrawingContext;
class AbstractGeometricItem;
using AbstractGeometricItemPtr = std::unique_ptr<AbstractGeometricItem>;

class DrawingContext
{
public:
    DrawingContext() = default;

    static std::unique_ptr<DrawingContext> Create();

    void SetNativeContext(std::unique_ptr<INativeDrawingContext> context);

    INativeDrawingContext* GetNativeContext();

    unsigned GetNumItems() const;

    void AddDrawable(AbstractGeometricItemPtr item);

    AbstractGeometricItem* GetDrawable(unsigned idx) const;

private:

    std::vector<std::unique_ptr<AbstractGeometricItem> > mItems;
    std::unique_ptr<INativeDrawingContext> mNativeDrawingContext;
};

using DrawingContextPtr = std::unique_ptr<DrawingContext>;
