#include "multiline.h"
#include "scene.h"

MultiLine::MultiLine(Point startIn, Scene *s) : Shape(startIn, s->getDefaultColour()) {
    points.push_back(Point(0, 0));
}

void MultiLine::addPoint(Point toAdd) {
    toAdd = Point(toAdd.x - start.x, toAdd.y - start.y);
    points.push_back(toAdd);
    points.push_back(toAdd);
}

void MultiLine::display(QPainter *qp) {
    qp->setPen(QPen(colour, 2, Qt::SolidLine));
    QVector<QPoint> qv;
    for (Point &p: points) {
        qv.push_back(QPoint(start.x + p.x, start.y + p.y));
    }
    qp->drawLines(qv);
}

void MultiLine::displayHighlight(QPainter *qp, QColor colourIn) {
    qp->setPen(QPen(colourIn, 2, Qt::DashLine));
    QVector<QPoint> qv;
    for (Point &p: points) {
        qv.push_back(QPoint(start.x + p.x, start.y + p.y));
    }
    qp->drawLines(qv);
}

void MultiLine::update(Point in, Scene *parent) {
    addPoint(in);
}

float MultiLine::innerDistance() {
    return distanceBetweenPoints(start, points.back());
}

bool MultiLine::pointInShape(Point in) {
    Point delta(in.x - start.x, in.y - start.y);
    for (int i = 1; i < (int) points.size(); i += 2) {
        Point &p = points[i];
        if (distanceBetweenPoints(delta, p) <= 1.5) {
            return true;
        }
    }
    return false;
}