import tkinter
import serial
import time

myController = serial.Serial("COM12", 115200)
time.sleep(2)

windowwidth = 1080
windowheight = 680

points = []
drawing = False

def homing():
    print('Hommmmming now!')
    message = 'Home'
    myController.write((message + '\n').encode())
    print('sent home')
    
def goto():
    xpos = xvalue.get()
    ypos = yvalue.get()
    message = 'X' + str(xpos) + 'Y' + str(ypos)
    print((int(xpos), int(ypos)))
    myController.write((message + '\n').encode())
    print('sent x y')

def Drwing():
    print('Drawing')
    print(points)
    
def Sendittothemachine():
    print('Sending it to the machine ^^')
    time.sleep(2)
    for point in points[::2]:
        xpos, ypos = point
        message = 'X' + str(xpos) + 'Y' + str(ypos)
        myController.write((message + '\n').encode())
        print("Point num " + str(points.index(point) + 1))
        time.sleep(1)
    print("FINISHED!!!!!")

def startdrawing(event):
    global lastpoint, drawing
    print(f"Left click at ({event.x}, {event.y})")
    lastpoint = (event.x, event.y)
    points.append(lastpoint)
    drawing = True
    print('start drawing')

def drawingnow(event):
    global point, lastpoint, drawing
    if drawing:
        point = (event.x, event.y)
        drawingArea.create_line(lastpoint[0], lastpoint[1], point[0], point[1], fill="#000000", width=2)
        points.append(point)
        lastpoint = point
        print('drawing')

def stopdrawing(event):
    global drawing
    finalpoint = (event.x, event.y)
    points.append(finalpoint)
    drawing = False 
    print('stop drawing')

def movePenUp():
    message = 'penUp'
    myController.write((message + '\n').encode())
    print("penUp sent")

def movePenDown():
    message = 'penDown'
    myController.write((message + '\n').encode())
    print("penDown sent")


Mywindow = tkinter.Tk()

xvalue = tkinter.StringVar()
yvalue = tkinter.StringVar()

Mywindow.geometry(str(windowwidth) + 'x' + str(windowheight))

WelcomeMessage = tkinter.Label(Mywindow, text='Hi, welcome to Hugo the artist ^^.', 
                               font=('Comic Sans MS', 20))

homeButton = tkinter.Button(Mywindow, text='Homing', width=20, 
                            height=5, command=homing, font=('Comic Sans MS', 12))
gotoButton = tkinter.Button(Mywindow, text='Go to', 
                            width=25, command=goto, font=('Comic Sans MS', 10))
drawButton = tkinter.Button(Mywindow, text='Draw', 
                            width=25, command=Drwing, font=('Comic Sans MS', 10))
sendButton = tkinter.Button(Mywindow, text='Send', 
                            width=25, command=Sendittothemachine, font=('Comic Sans MS', 10))
exitbutton = tkinter.Button(Mywindow, text='Bye!', 
                            width=25, command=Mywindow.destroy, font=('Comic Sans MS', 10))

PenUpButton = tkinter.Button(Mywindow, text='PenUp', 
                            width=25, command=movePenUp, font=('Comic Sans MS', 10))

PenDownButton = tkinter.Button(Mywindow, text='PenDown', 
                            width=25, command=movePenDown, font=('Comic Sans MS', 10))



getXlabel = tkinter.Label(Mywindow, text='X position', font=('Comic Sans MS', 10))
getXentry = tkinter.Entry(Mywindow, textvariable=xvalue, font=('Comic Sans MS', 8))

getYlabel = tkinter.Label(Mywindow, text='Y position', font=('Comic Sans MS', 10))
getYentry = tkinter.Entry(Mywindow, textvariable=yvalue, font=('Comic Sans MS', 8))

drawingArea = tkinter.Canvas(Mywindow, width=200, height=200, bg='white')
drawingArea.place(x=300, y=50)

drawingArea.bind("<Button-1>", startdrawing)
drawingArea.bind("<B1-Motion>", drawingnow)
drawingArea.bind("<ButtonRelease-1>", stopdrawing)

WelcomeMessage.pack()

homeButton.place(x=10, y=50)
gotoButton.place(x=10, y=200)

getXlabel.place(x=10, y=250)
getXentry.place(x=100, y=250)

getYlabel.place(x=10, y=300)
getYentry.place(x=100, y=300)



drawButton.place(x=250, y=380)
sendButton.place(x=500, y=380)
exitbutton.place(x=10, y=400)

PenUpButton.place (x= 10, y= 320)
PenDownButton.place (x= 10, y= 350)

Mywindow.mainloop()
