import GeometryRect from "./GeometryRect.js";

export default class GeometryPointCollection
{
    constructor()
    {
        this.points = [];
    }

    addGeometryPoint(geometryPoint)
    {
        if (!this.isContainingPoint(geometryPoint)) {
            this.points.push(geometryPoint);
        }
    }

    isContainingPoint(geometryPoint)
    {
        for (let p = 0; p < this.points.length; p++) {
            if (geometryPoint.isEqual(this.points[p])) {
                return true;
            }
        }

        return false;
    }

    getLength()
    {
        return this.points.length;
    }

    getPoint(index)
    {
        return this.points[index];
    }

    forEach(callback)
    {
        this.points.forEach(callback);
    }

    sort()
    {
        this.points.sort(
            function (a, b) {
                return a.x > b.x || a.y > b.y;
            }
        )
    }

    getRect()
    {
        if (this.getLength() < 2) {
            console.log('GeometryPointCollection.getRect(): Collection must contain at least 2 points!');
            return null;
        }

        this.sort();

        let positionTopLeft = this.getPoint(0);
        let positionBottomRight = this.getPoint(this.getLength() - 1);
        let width = positionBottomRight.x - positionTopLeft.x;
        let height = positionBottomRight.y - positionTopLeft.y;

        return new GeometryRect(positionTopLeft.x, positionTopLeft.y, width, height);
    }
}