import GeometryLine from "./GeometryLine.js";
import GeometryRect from "./GeometryRect.js";

export default class GeometryStroke extends GeometryLine
{
    getIntersectionWithLine(line) {
        let intersection = super.getIntersectionWithLine(line);

        if (
            intersection === null ||
            !this.getRect().isContainingPoint(intersection)
        ) {
            return null;
        }

        return intersection;
    }

    getLine()
    {
        return new GeometryLine(this.pointA, this.pointB);
    }

    getLength()
    {
        return this.pointA.getDistanceToPoint(this.pointB);
    }

    getIntersectionWithStroke(stroke)
    {
        let intersection = super.getIntersectionWithLine(stroke);

        if (
            intersection === null ||
            !this.getRect().isContainingPoint(intersection) ||
            !stroke.getRect().isContainingPoint(intersection)

        ) {
            return null;
        }

        return intersection;
    }

    getRect()
    {
        let x = Math.min(this.pointA.x, this.pointB.x);
        let y = Math.min(this.pointA.y, this.pointB.y);

        let width = Math.max(this.pointA.x, this.pointB.x) - x;
        let height = Math.max(this.pointA.y, this.pointB.y) - y;

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