#!/usr/bin/env python

import sys
#import socket
import json
import time
import sqlite3
from pyrow import pyrow as pyrow
from pyrow.ergmanager import ErgManager

#HOST = 'ergo-socket.hrj.inthepro.de'
#PORT = 1753


print('DB verbinden')

sql_datenbank = sqlite3.connect('/var/underergo/underergo.db', check_same_thread=False)

print('socket erstellen')

#try:
#	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#except socket.error:
#	print('socket erstellen fehlgeschlagen')
#	sys.exit()

#print('socket erstellt, socket verbinden')

#s.connect((HOST, PORT))
#print('socket verbunden')

def send_socket(data_dict):
    global sql_datenbank

    try:
        json_payload = json.dumps(data_dict)

        #print(json_payload.encode());
        sql_datenbank.execute("INSERT INTO underergo_puffer (puffer_text, puffer_uebertragen, puffer_erstellt) VALUES (?, 'nein', datetime('now'));", [json_payload.encode()]);
        sql_datenbank.commit()

        print(time.time())
        #print(time.monotonic())

        #s.sendall(json_payload.encode())
        #print('Daten gesendet')
        #antwort = s.recv(1024)
        #print('Antwort: ', repr(antwort))
    except sqlite3.Error:
        print('senden fehlgeschlagen')
        #s.close()

        ergman.stop()
        sys.exit(1)
        os._exit(1)

def new_erg_callback(erg):
    send_socket(data_dict={
        'pyerg': str(erg._pyerg),
        'id': str(erg.id),
        'name': str(erg),
        'status': str(erg._status_q),
        'rate': str(erg.rate),
        'data': "Added",
    })

def update_erg_callback(erg):
    global sql_datenbank
    global ergman
    print("x ")
    send_socket(data_dict={
        'pyerg': str(erg._pyerg),
        'id': str(erg.id),
        'name': str(erg),
        'status': str(erg._status_q),
        'rate': str(erg.rate),
        'data': erg.data,
    })

    zeiger = sql_datenbank.cursor()
    zeiger.execute("SELECT befehl_id, befehl_text, befehl_guid, befehl_uebertragen, befehl_erstellt FROM underergo_befehl WHERE befehl_uebertragen = 'nein';");

    rows = zeiger.fetchall()
    print('Befehle: ', len(rows))

    if len(rows) > 0:
        for row in rows:
            befehl_array = json.loads(row[1])
            data = erg.data
            print('Geraet: ', repr(data['serial']))
            print('Antwort-geraet: ', befehl_array['geraet'])
            print('Antwort-funktion: ', befehl_array['funktion'])
            print('Antwort-Array: ', repr(befehl_array))
            print('ID ', row[0])

            if befehl_array['funktion'] == 'set_workout':
                if data['serial'] == befehl_array['geraet']:
                    erg.set_workout(program=None, workout_time=befehl_array['zeit'], distance=befehl_array['distanz'], split=befehl_array['split'], pace=befehl_array['pace'])

                    sql_datenbank.execute("UPDATE underergo_befehl SET befehl_uebertragen = 'ja' WHERE befehl_id = '" + str(row[0]) + "';");
                    sql_datenbank.commit()

        print(time.time())

    #print("Update {}: {}".format(erg, erg.data))


def main():
    global ergman
    ergman = ErgManager(pyrow,
                        add_callback=new_erg_callback,
                        update_callback=update_erg_callback,
			check_rate=0.5,
			update_rate=0.2)
    #time.sleep(10)
    #ergman.stop()

if __name__ == "__main__":
    main()


