from tkinter import *
import threading
import time
import socket

nula = False
def zastav():
    global nula
    nula = True

def druha(x):
    time.sleep(1)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #server_address = ('192.168.1.22', 10012)
    server_address = ('ev3dev', 10013)
    
    print( 'connecting to %s port %s' % server_address,sys.stderr)
    sock.connect(server_address)
    print(" OK")
    global window, graf, fr
    global koniec, nula
    print('ina thread %s', x)
    cnt = 0
    prev = 0
    prevf = 2
    while (not koniec):
        if nula:
            print("zastav vsetky motory")
            nula = False
            continue
        print(fr.get())
        f1 = eval(fr.get())
        frekv = 1/(2*f1)
        speed = sp.get()
        if speed == 0:
            continue
        #print(frekv, speed)
        #try: 
        # Send data
        message = '1 ' + str(speed) + ' ' + str(round(frekv, 3)) # Type, power, time
        while len(message) < 10:
            message = message + '0'
        #print( 'sending "%s"' % message, sys.stderr)
        sendbytes = message.encode()
        sock.sendall(sendbytes)
        done = sock.recv(4)
        k = eval(done.decode())
        print(k)
        #graf.create_line(cnt, min(410+2*prev, 410+2*k)-1, cnt, max(410+2*prev, 410+2*k), fill="red")
        #graf.create_line(cnt, min(400-(prevf*40), 400-(f1*40))-1, cnt, max(400-(prevf*40), 400-(f1*40))+1, fill="blue")
        graf.create_rectangle((2*cnt)%400, min(390+2*prev, 390+2*k)-1, (2*cnt+1)%400, max(390+2*prev, 390+2*k), outline="red")
        graf.create_rectangle((2*cnt)%400, min(420-(prevf*40), 420-(f1*40))-1, (2*cnt+1)%400, max(420-(prevf*40), 420-(f1*40))+1, outline="blue")
        cnt += 1
        prev = k
        prevf = f1
        """
        message = '1 -' + str(speed) + ' ' + str(frekv) # Type, power, time
        while len(message) < 10:
            message = message + '0'
        print( 'sending "%s"' % message, sys.stderr)
        sendbytes = message.encode()
        sock.sendall(sendbytes)
        done = sock.recv(4)
        print(done)"""
    print ("koniec")
    return x

def on_closing():
    global koniec
    global window
    koniec = True
    fr.destroy()
    window.destroy()
        
koniec = False
t = threading.Thread(target=druha, args=(1,))
t.start()
window = Tk()
window.title("Roboticka Liga")

text = Label(window, text = "Frekvencia")             
text.grid(column = 1, row = 0)

text = Label(window, text = "Rychlost")             
text.grid(column = 1, row = 2)

fr = Spinbox(window, from_ = 2.0, to = 10.0, format="%.1f",increment=0.5)
fr.grid(column=1,row=1)
fr.delete(0,"end")
fr.insert(0,2.0)

sp = Spinbox(window, values=(5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100), width=8)
sp.delete(0,"end")
sp.insert(0,15)
sp.grid(column=1,row=3)

canvas_width = 400
canvas_height = 400
offset = canvas_height
graf = Canvas(window, width=canvas_width,height=canvas_height)
graf.grid(column = 0, row = 0, rowspan=5)
graf.configure(background = "white")#"""
window.protocol("WM_DELETE_WINDOW", on_closing)
window.mainloop()
