# festival_of_lights
import board, busio, sdcardio, storage, os, time, random, time, digitalio
import audiobusio
from audiocore import WaveFile

# SD
spi = busio.SPI(board.GP18, board.GP19, board.GP16)
sd = sdcardio.SDCard(spi, board.GP17, baudrate=1_000_000)
vfs = storage.VfsFat(sd)
storage.mount(vfs, "/sd")

print("Festival:", os.listdir("/sd/festival"))

# I2S to PCM510x
audio = audiobusio.I2SOut(
    bit_clock=board.GP10,   # BCK
    word_select=board.GP9,  # WSEL / LRCLK
    data=board.GP11,        # DIN
)

#Button set up
button_1 = digitalio.DigitalInOut(board.GP13)
button_1.switch_to_input(pull=digitalio.Pull.UP)

button_2 = digitalio.DigitalInOut(board.GP14)
button_2.switch_to_input(pull=digitalio.Pull.UP)

button_3 = digitalio.DigitalInOut(board.GP15)
button_3.switch_to_input(pull=digitalio.Pull.UP)

button_4 = digitalio.DigitalInOut(board.GP20)
button_4.switch_to_input(pull=digitalio.Pull.UP)

button_5 = digitalio.DigitalInOut(board.GP21)
button_5.switch_to_input(pull=digitalio.Pull.UP)

button_6 = digitalio.DigitalInOut(board.GP22)
button_6.switch_to_input(pull=digitalio.Pull.UP)

# Play wav file
def play_wav(path):
    print("Opening:", path)
    f = open(path, "rb")
    w = WaveFile(f)
    print("rate:", w.sample_rate, "bits:", w.bits_per_sample, "ch:", w.channel_count)
    audio.play(w)
    while audio.playing:
        time.sleep(0.01)
        if button_1.value == False:
            audio.stop()
        elif button_2.value == False:
            audio.stop()
        elif button_3.value == False:
            audio.stop()
        elif button_4.value == False:
            audio.stop()
        elif button_5.value == False:
            audio.stop()
        elif button_6.value == False:
            audio.stop()
    f.close()
    print("Done.")

songs = ["mistletoe.wav", "winterwonderland.wav", "silversprings.wav", "someonetoyou.wav", "mrbrightside.wav", "standbyme.wav"]

while True:
    if button_1.value == False:  # Button is pressed when False
        print("Button 1 pressed.")
        play_wav("/sd/festival/" + songs[0])
    elif button_2.value == False:
        play_wav("/sd/festival/" + songs[1])
    elif button_3.value == False:
        play_wav("/sd/festival/" + songs[2])
    elif button_4.value == False:
        play_wav("/sd/festival/" + songs[3])
    elif button_5.value == False:
        play_wav("/sd/festival/" + songs[4])
    elif button_6.value == False:
        play_wav("/sd/festival/" + songs[5])
    else:  # Button is not pressed
        print("No button pressed")
        play_wav("/sd/festival/" + songs[random.randrange(0, len(songs))])