from datetime import datetime
from pypylon import pylon
import nimmAuf
import smbus2
import os
import argparse
import bestimmeVolumen
from threading import Thread
import time


programmstart = time.time()
# Argumente parsen (bei Aufruf im Terminal z.B. 'starteMessung.py -n 100' eingeben)
ap = argparse.ArgumentParser(description="""Skript zum Aufnehmen von Bildern der Teststrecke und der 
                                            Volumenbestimmung von Luftblasen""")
ap.add_argument("-n", "--number", default=400, type=int, help="Anzahl an Frames die aufgenommen werden sollen. Default: 400 Bilder")
ap.add_argument("-fr", "--framerate", default=100, type=int, help="Framerate in fps. Richtwerte: <Flow 3 ml/s:50 fps, 3-6ml/s:100 fps, >6ml/s:200 fps; Default: 100 fps")


args = vars(ap.parse_args())

# Argumente des Parsers extrahieren
numberOfImagesToGrab = args['number']
framerate = args['framerate']


if __name__ == '__main__':
    startzeit = time.time()
    
    #Test ob Kamera angeschlossen ist
    devices = pylon.TlFactory.GetInstance().EnumerateDevices()
    if len(devices) == 0:
        print("Keine Kamera angeschlossen oder Kamera woanders geöffnet.")
        return False

    # Test ob Drucksensor angeschlossen ist
    try:
        bus = smbus2.SMBus(0)
        bus.read_i2c_block_data(0x40, 0, 2)  # 2 Bytes empfangen
    except OSError:
        print("Kein Drucksensor angeschlossen")
        exit()
    # Aus der aktuellen Zeit und den Parametern einen individuellen Ordnernamen generieren
    dirname = f'{datetime.now().strftime("%Y-%m-%d-%H-%M-%S")}'

    os.mkdir(dirname) # Ordner erstellen
    print(f"Ordnername: {dirname}")
    beginn = time.time()-programmstart

    # Threads zum Aufnehmen und Verarbeiten starten
    t_aufnahme = Thread(target=nimmAuf.starte, args=(dirname, numberOfImagesToGrab, framerate, startzeit))
    t_tracke = Thread(target=bestimmeVolumen.tracke, args=(dirname, numberOfImagesToGrab))

    t_aufnahme.start()
    t_tracke.start()
    t_aufnahme.join()
    t_tracke.join()


[(12, 'time.time', 'time.time', False, 'import time\n'), (14, 'argparse.ArgumentParser', 'argparse.ArgumentParser', False, 'import argparse\n'), (28, 'time.time', 'time.time', False, 'import time\n'), (46, 'os.mkdir', 'os.mkdir', False, 'import os\n'), (51, 'threading.Thread', 'Thread', False, 'from threading import Thread\n'), (52, 'threading.Thread', 'Thread', False, 'from threading import Thread\n'), (38, 'smbus2.SMBus', 'smbus2.SMBus', False, 'import smbus2\n'), (48, 'time.time', 'time.time', False, 'import time\n'), (31, 'pypylon.pylon.TlFactory.GetInstance', 'pylon.TlFactory.GetInstance', False, 'from pypylon import pylon\n'), (44, 'datetime.datetime.now', 'datetime.now', False, 'from datetime import datetime\n')]