#!/usr/bin/env python3

import subprocess
import serial
import sys

print(sys.argv)

# Extract port (first arg if it's not a command)
commands = ["src", "lib", "ls", "reset", "follow", "db"]
port = None
if len(sys.argv) > 1 and sys.argv[1] not in commands:
    port = sys.argv[1]


for cmd in sys.argv[1:]:
    print(cmd)
    match cmd:
        case "src":
            if port:
                subprocess.call(["mpremote", "connect", port, "fs", "cp", "-r", ".", ":" ], cwd="src")
            else:
                print("Error: Port required for 'src' command")
        case "lib":
            if port:
                subprocess.call(["mpremote", "connect", port, "fs", "cp", "-r", "lib", ":" ])
            else:
                print("Error: Port required for 'lib' command")
        case "ls":
            if port:
                subprocess.call(["mpremote", "connect", port, "fs", "ls", ":" ])
            else:
                print("Error: Port required for 'ls' command")
        case "reset":
            if port:
                with serial.Serial(port, baudrate=115200) as ser:
                    ser.write(b'\x03\x03\x04')
            else:
                print("Error: Port required for 'reset' command")
        case "follow":
            if port:
                with serial.Serial(port, baudrate=115200) as ser:
                    while True:
                        if ser.in_waiting > 0:  # Check if there is data in the buffer
                            data = ser.readline().decode('utf-8').strip()  # Read and decode the data
                            print(data)
            else:
                print("Error: Port required for 'follow' command")
        case "db":
            if port:
                subprocess.call(["mpremote", "connect", port, "fs", "cp", "-r", "db", ":" ])
            else:
                print("Error: Port required for 'db' command")
