import serial
from gpiozero import OutputDevice
from flux_led import WifiLedBulb
import pygame
from time import sleep

raspi_portpath = '/dev/serial/by-id/usb-Silicon_Labs_CP2104_USB_to_UART_Bridge_Controller_018D7EEE-if00-port0'
glove_ser = serial.Serial(raspi_portpath, 9600)

bulb_ip = "172.20.10.6"
bulb = WifiLedBulb(bulb_ip)
bulb.update_state()

v_motor = OutputDevice(17)

pygame.init()
pygame.mixer.init()

def freq_light(code):
    if code == "y":
        bulb.setRgb(255, 255, 0)
    elif code == "r":
        bulb.setRgb(255, 0, 0)
    else:
        bulb.setRgb(0, 255, 0)

def freq_vibrate(code):
    if code == "y":
        t = 0.5
    elif code == "r":
        t = 1.0
    else:
        t = 0.1
    v_motor.on()
    sleep(t)
    v_motor.off()

def freq_audio(code):
    if code == "y":
        pygame.mixer.music.load('/home/bgbrog26/Desktop/SMGS/beep2.mp3')
    elif code == "r":
        pygame.mixer.music.load('/home/bgbrog26/Desktop/SMGS/beep3.mp3')
    else:
        pygame.mixer.music.load('/home/bgbrog26/Desktop/SMGS/beep1.mp3')
    pygame.mixer.music.play()

if __name__ == "__main__":
    while True:
        ser_read = glove_ser.readline().decode('ascii', errors='ignore').strip()
        if ser_read.startswith('ONSET'):
            _, timestamp, sig_diff, tap = ser_read.split(",")
            print(f"Spike: {timestamp} | Δ: {sig_diff} | tap: {tap}")

            sig_diff = float(sig_diff)
            if sig_diff < 15:
                freq = "r"
            elif sig_diff < 25:
                freq = "y"
            else:
                freq = "g"

            freq_light(freq)
            freq_vibrate(freq)
            freq_audio(freq)
