#ifndef AREA_HPP_INCLUDED
#define AREA_HPP_INCLUDED

#include "Tile.hpp"
#include "Convex.hpp"
#include <vector>
#include <cstdint>

class Area
{
	private:
		std::int32_t Plane;
		std::vector<Tile> Vertices;

    public:
        Area();
        Area(const Tile& TopLeft, const Tile& BottomRight);
        Area(const std::vector<Tile>& Vertices);
        Area(const Area& A);

		bool Valid() const;
        bool Contains(const Tile& T) const;
        Tile GetMiddle() const;
		std::int32_t GetPlane() const;
		std::vector<Tile> GetVertices() const;

        Tile GetHybridRandomTile(double ProbabilityX, double ProbabilityY, double StandardDeviationX, double StandardDeviationY, double PointGenAccuracy) const;
        Tile GetProfileHybridRandomTile() const;
        Tile GetProfileHybridRandomTile(double PointGenAccuracy) const;

        friend std::ostream& operator<<(std::ostream& OS, const Area& A);
        ~Area();
};

#endif // AREA_HPP_INCLUDED
