from flask import Flask, render_template, request
import serial
import time
from serial.tools.list_ports import comports

app = Flask(__name__)

TIMEOUT = 0.1
board_port = "/dev/cu.usbserial-FTC1WHAM"
print(f"Using port {board_port}")
baudrate = 115200

try:
    ser = serial.Serial(port=board_port, baudrate=baudrate, timeout=TIMEOUT)
    time.sleep(3) # sleep 3 seconds to allow time for connection to be established
    print(ser.readline())
except serial.SerialException:
    ser = None

@app.route("/", methods=['GET', 'POST'])
def index():

    if request.method == 'POST':
        if not ser:
            return render_template("index.html")

        # loops are for luzers
        servo1_left = request.form.get("servo1_left")
        servo1_right = request.form.get("servo1_right")
        servo2_up = request.form.get("servo2_up")
        servo2_down = request.form.get("servo2_down")
        servo3_up = request.form.get("servo3_up")
        servo3_down = request.form.get("servo3_down")
        servo4_up = request.form.get("servo4_up")
        servo4_down = request.form.get("servo4_down")

        if servo1_left == 'left':
            ser.write('11'.encode())
        elif servo1_right == 'right':
            ser.write('10'.encode())

        if servo2_up == 'up':
            ser.write('20'.encode())
        elif servo2_down == 'down':
            ser.write('21'.encode())

        if servo3_up == 'up':
            ser.write('30'.encode())
        elif servo3_down == 'down':
            ser.write('31'.encode())

        if servo4_up == 'up':
            ser.write('41'.encode())
        elif servo4_down == 'down':
            ser.write('40'.encode())


        # ESC controls
        esc_signal = request.form.get("esc_signal")
        try:
            pwm_value = int(esc_signal)
        except:
            return render_template("index.html")
        ser.write(f'0{pwm_value}'.encode())

        # Close the port when needed
        if request.form.get('close') == 'close serial port':
            ser.close()

        return render_template("index.html")

    # GET
    else:
        return render_template("index.html")


