import os
import socket
import wolfssl

def run_client(file_path):
    # Festlegen der Cipher Suite und TLS-Version
    cipher_suite = "TLS_AES_128_GCM_SHA256"  # Sichere Cipher Suite
    context = wolfssl.SSLContext(wolfssl.PROTOCOL_TLSv1_3)  # TLS 1.3 verwenden
    context.set_ciphers(cipher_suite)
    
    print(f"TLS-Kontext mit Cipher Suite '{cipher_suite}' erfolgreich initialisiert.")

    # Sichere Verbindung mit dem Server herstellen
    try:
        print("Versuche, Verbindung zum Server herzustellen...")
        with socket.create_connection(("192.168.125.101", 5000)) as sock:
            print("Verbindung zum Server erfolgreich hergestellt.")
            with context.wrap_socket(sock, server_hostname="192.168.125.101") as ssl_sock:
                print("Mit dem Server verbunden und SSL-Handschlag abgeschlossen!")

                # Datei senden
                print(f"Beginne mit dem Senden der Datei '{file_path}'...")
                with open(file_path, "rb") as f:
                    total_bytes_sent = 0
                    while chunk := f.read(1024):
                        ssl_sock.sendall(chunk)
                        total_bytes_sent += len(chunk)
                print(f"Datei '{file_path}' erfolgreich an den Server gesendet. ({total_bytes_sent} Bytes)")
                
    except Exception as e:
        print(f"Fehler bei der Verbindung zum Server: {e}")

if __name__ == "__main__":
    # Dateipfad der zu übertragenden Datei
    file_to_send = "../testData/test.txt"

    # Stelle sicher, dass die Datei existiert
    if not os.path.exists(file_to_send):
        print(f"Die Datei '{file_to_send}' wurde nicht gefunden!")
    else:
        run_client(file_to_send)