#pragma once

#include <QPolygonF>
#include <QPointF>

#include "ros_bridge/include/messages/geometry_msgs/polygon_stamped.h"

template <class PointType = QPointF, template <class, class...> class ContainerType = QVector>
class GenericPolygon{ //
    typedef ros_bridge::messages::geometry_msgs::polygon::GenericPolygon<PointType, ContainerType> Polygon;
public:
    GenericPolygon(){}
    GenericPolygon(const GenericPolygon &other) : _polygon(other._polygon){}

    GenericPolygon& operator=(const GenericPolygon& other) {
        this->_polygon = other._polygon;
        return *this;
    }

    const Polygon &polygon() const {return _polygon;}
          Polygon &polygon()       {return _polygon;}

  const ContainerType<PointType> &path() const {return _polygon.points();}
        ContainerType<PointType> &path()       {return _polygon.points();}

private:
    Polygon _polygon;

};
