#pragma once

#include "SvgShapeElement.h"
#include "Point.h"

#include "XmlAttribute.h"

class SvgCircle : public SvgShapeElement
{
public:
    enum class Type
    {
        REGULAR,
        ELLIPSE
    };

    SvgCircle(Type type = Type::REGULAR);

    Point getLocation() const;

    double getRadius() const;

    Type getType() const;

    double getMinorRadius() const;

    void setLocation(const Point& loc);

    void setRadius(double rad);

    void setMinorRadius(double rad);
private:
    Type mType{ Type::REGULAR };
};

class SvgRectangle : public SvgShapeElement
{
public:
    SvgRectangle();

    void setLocation(const Point& loc);

    void setWidth(double width);

    void setHeight(double height);

    void setRadius(double radius);
};

class SvgPolygon : public SvgShapeElement
{
public:
    SvgPolygon();

    void setPoints(const std::vector<Point>& loc);
};

class SvgPolyline : public SvgShapeElement
{
public:
    SvgPolyline();

    void setPoints(const Point& startPoint, const std::vector<Point>& loc);

    void setPoints(const std::vector<Point>& loc);
};

class SvgLine : public SvgShapeElement
{
public:
    SvgLine(const Point& startPoint, const Point& endPoint, std::size_t precision = 0);
};

class SvgPath : public SvgShapeElement
{
public:
    SvgPath();

    std::string getPath() const;

    void setPath(const std::string& mPath);
    void setFillRule(const std::string& fillRule);
};
