#!/usr/bin/env python

import sys
import socket
import json
import datetime
import time
import sqlite3
import mysql.connector

HOST = 'ergo-socket.hrj.rowtrain.de'
PORT = 1753


print('DB verbinden')

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

#sql_datenbank.execute("PRAGMA synchronous = OFF;")
#sql_datenbank.execute("PRAGMA journal_mode = MEMORY;")
#sql_datenbank.commit()

sql_datenbank = mysql.connector.connect(
  host="localhost",
  user="underergo",
  password="wD!ofgh.F8"
)

#sql_datenbank.autocommit(True);

print(sql_datenbank)

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')

zeiger = sql_datenbank.cursor()


while True:
    try:
        del zeiger
        zeiger = sql_datenbank.cursor()
        zeiger.execute("SELECT puffer_id, puffer_text, puffer_erstellt FROM underergo.underergo_puffer WHERE puffer_uebertragen = 'nein' ORDER BY puffer_erstellt ASC LIMIT 100;");

        rows = zeiger.fetchall()
        print('Puffer: ', len(rows), datetime.datetime.now())

        sql_datenbank.commit()

        if len(rows) > 0:
            for row in rows:
                #print(row)
                s.sendall(row[1].encode())
                print('Daten gesendet')
                antwort = s.recv(4096)
                print('Antwort: ', repr(antwort))

                if antwort != '':
                    zeiger.execute("UPDATE underergo.underergo_puffer SET puffer_uebertragen = 'ja' WHERE puffer_uebertragen = 'nein' AND puffer_id = '" + str(row[0]) + "';");
                    #zeiger.execute("DELETE FROM underergo.underergo_puffer WHERE puffer_uebertragen = 'nein' AND puffer_id = '" + str(row[0]) + "';");
                sql_datenbank.commit()
                print('Daten bereinigt')
            zeiger.close()

            print('Antwort Laenge: ', len(antwort))
            print('Antwort jetzt: ', (antwort))

            count = 0
            for char in antwort:
                #print('char: ', char)
                if char == 123:# {
                    count = count + 1
            print('anzahl: ', count)

            if count == 1:
                antwort_array = json.loads(antwort)
                print('Antwort-Array: ', antwort_array['funktion'])
                print('Antwort-Array: ', repr(antwort_array))

                if antwort_array['funktion'] == 'set_workout':
                    print('Antwort guid: ', (antwort_array['guid']))

                    zeiger = sql_datenbank.cursor()
                    zeiger.execute("SELECT befehl_id FROM underergo.underergo_befehl WHERE befehl_guid = %s;", [antwort_array['guid']]);
                    sql_datenbank.commit()

                    rows = zeiger.fetchall()

                    sql_datenbank.commit()

                    print('anzahl_befehl: ', len(rows))

                    if len(rows) == 0:
                        zeiger.execute("INSERT INTO underergo.underergo_befehl (befehl_text, befehl_guid, befehl_uebertragen, befehl_erstellt) VALUES (%s, %s, 'nein', now());", [antwort, antwort_array['guid']]);
                        sql_datenbank.commit()
                        print('Befehl gespeichert: ', (antwort))

    except socket.error:
        print('senden fehlgeschlagen')
        s.close()

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

    time.sleep(0.1)
