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', ([], {'description': '"""Skript zum Aufnehmen von Bildern der Teststrecke und der \n                                            Volumenbestimmung von Luftblasen"""'}), False, 'import argparse\n'), (28, 'time.time', 'time.time', ([], {}), False, 'import time\n'), (46, 'os.mkdir', 'os.mkdir', (['dirname'], {}), False, 'import os\n'), (51, 'threading.Thread', 'Thread', ([], {'target': 'nimmAuf.starte', 'args': '(dirname, numberOfImagesToGrab, framerate, startzeit)'}), False, 'from threading import Thread\n'), (52, 'threading.Thread', 'Thread', ([], {'target': 'bestimmeVolumen.tracke', 'args': '(dirname, numberOfImagesToGrab)'}), False, 'from threading import Thread\n'), (38, 'smbus2.SMBus', 'smbus2.SMBus', (['(0)'], {}), 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')]