#!/usr/bin/python3

# OSC komunikacija
from pythonosc.osc_server import BlockingOSCUDPServer
from pythonosc.dispatcher import Dispatcher
from time import time
from threading import Thread

# Risanje grafa
import matplotlib
matplotlib.use('GTK4Agg')
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

dispecer = Dispatcher()

srv = BlockingOSCUDPServer(("127.0.0.1", 57120), dispecer)

# Zacetna (casovna) tocka
zacetek = time()

# use ggplot style for more sophisticated visuals
plt.style.use('ggplot')


size = 1000
x_vec = []
gx_vec = []
gy_vec = []
gz_vec = []
ax_vec = []
ay_vec = []
az_vec = []

x = 0
gx = 0
gy = 0
gz = 0
ax = 0
ay = 0
az = 0

interval = 60 / 1000
razlika = 0

# Shranim "trenutne" vrednosti
def beriSenzor(address, *args):
    global x, gx, gy, gz, ax, ay, az, razlika

    if (address == '/accel'):
        ax, ay, az = args

    if (address == '/euler'):
        gx, gy, gz = args
        print("euler", args)

    razlika = time() - zacetek
    if (razlika > interval):
        izrisi()
        razlika = razlika % interval

fig = plt.gcf()
#gxs = fig.add_subplot()
#gys = fig.add_subplot()

#gxp, = gxs.plot([])
#gyp, = gys.plot([])

fajl_g = open("graf_g.csv", "w")
fajl_g.write("t,gx,gy,gz,rgx,rgy,rgz\n")
fajl_a = open("graf_a.csv", "w")
fajl_a.write("t,ax,ay,az\n")
def izrisi():
    global x, gx, gy, gz, ax, ay, az, fig, plt, gxp, gyp, zacetek

    # Dodamo casovno tocko
    x = time() - zacetek
    #x_vec.append(x)

    fajl_g.write(str(x) + "," + str(gx) + "," + str(gy) + "," + str(gz) + "," + str(gx % 3.14) + "," + str(gy % 3.14) + "," + str(gz % 3.14) + "\n")

    fajl_a.write(str(x) + "," + str(ax) + "," + str(ay) + "," + str(az) + "\n")



    # Dodamo gyro in accel vrednosti v polja
    #gx_vec.append(gx)
    #gy_vec.append(gy)
    #gz_vec.append(gz)
    #ax_vec.append(ax)
    #ay_vec.append(ay)
    #az_vec.append(az)

    #plt.cla()
    #yplot.plot(x_vec, gx_vec)
    #yplot.plot(x_vec, gy_vec)
    #fig.set_xdata(x_vec)

    #gxp.set_data(x_vec, gx_vec)
    #gyp.set_data(x_vec, gy_vec)
    #print("RISEMO", x, gx)
    #plt.plot(x_vec, gx_vec, label="gyro x")
    #plt.plot(x_vec, gy_vec)
    #plt.plot(x_vec, gz_vec)
    #plt.plot(x_vec, ax_vec)
    #plt.plot(x_vec, ay_vec)
    #plt.plot(x_vec, az_vec)

    #plt.pause(0.0001)
    #fig.canvas.draw()
    #plt.show()
    #plt.pause(0.0001)
    #return gxp,

    #plt.gcf().autofmt_xdate()
    #plt.tight_layout()
    #plt.pause(0.001)
    
    #plt.gcf()
    #plt.pause(1)
    #return plt
    #plt.show()
    #return plt

# Animiraj na cca 60hz
#animacija = FuncAnimation(fig, izrisi, 500)
#animacija = FuncAnimation(plt.gcf(), izrisi, interval=0.05, repeat=True)
#print(animacija)
#animacija = FuncAnimation(fig, izrisi)

#plt.show()

dispecer.map("/*", beriSenzor)
# Zacni poslusat senzor
print("serving...")
srv.serve_forever()
#trd = Thread(target=srv.serve_forever).start()

# Kazi graf
#print("Kazi graf!")
#plt.tight_layout()
#plt.show()
#plt.plot([0, 0], [1, 5], [3, 7])
#print('kazem', plt)

# AJD!
file.close()
print("bye")
