from PyQt4.QtGui import *
from PyQt4.QtCore import *

from shape import Shape

class Canvas(QLabel):
    done = pyqtSignal()
    epsilon = 7**2 # TODO: Tune value

    def __init__(self, *args, **kwargs):
        super(Canvas, self).__init__(*args, **kwargs)
        self.points = []
        self.shapes = [Shape('one', QColor(0, 255, 0))]
        self.current_line = Shape('line', QColor(255, 0, 0))

    def mousePressEvent(self, ev):
        if ev.button() != 1:
            return

        if not self.points:
            self.setMouseTracking(True)

        self.points.append(ev.pos())
        self.shapes[0].addPoint(ev.pos())
        if self.isClosed():
            self.done.emit()
            print "Points:", self.points
            self.points = []
            self.shapes[0].setFill(True)
            self.setMouseTracking(False)
        self.repaint()

    def isClosed(self):
        return len(self.points) > 1 and self.closeEnough(self.points[0], self.points[-1])

    def mouseMoveEvent(self, ev):
        self.current_line.points = [self.points[-1], self.pos()]
        self.repaint()
       #print "moving", ev.pos()



    def closeEnough(self, p1, p2):
        def dist(p):
            return p.x() * p.x() + p.y() * p.y()
        print p1, p2
        print abs(dist(p1) - dist(p2)), self.epsilon
        return abs(dist(p1) - dist(p2)) < self.epsilon

    def paintEvent(self, event):
        super(Canvas, self).paintEvent(event)
        for shape in self.shapes:
            qp = QPainter()
            qp.begin(self)
            shape.drawShape(qp)
            self.current_line.drawShape(qp)
            qp.end()