import datetime
from pyttsx3 import engine
import speech_recognition as sr
import pyttsx3 as py
import winsound

engine = py.init()


def alarm(timing):
    alTime = str(datetime.datetime.now().strptime(timing, "%I:%M %p"))

    alTime = alTime[11:-3]
    print(alTime)
    Horeal = alTime[:2]
    Horeal = int(Horeal)
    Mireal = alTime[3:5]
    Mireal = int(Mireal)

    print(f"Done, alarm is set for {timing}")

    while True:
        if Horeal == datetime.datetime.now().hour and Mireal == \
                datetime.datetime.now().minute:
            print("alarm is running")
            winsound.PlaySound('abc', winsound.SND_LOOP)

        elif Mireal < datetime.datetime.now().minute:
            break


def speech(audio):
    engine.setProperty('rate', 200)
    voices = engine.getProperty('voices')
    # engine.setProperty('voice', voices[1].id)
    engine.setProperty('voice', voices[0].id)
    engine.say(audio)
    engine.runAndWait()


def takeCommand():
    # It takes microphone input from the user and returns string output

    r = sr.Recognizer()
    with sr.Microphone() as source:
        r.adjust_for_ambient_noise(source, duration=1)
        print()
        print("Listening...")
        print()
        # r.pause_threshold = 1
        audio = r.listen(source)

    try:
        print("Recognizing...")
        print()
        query = r.recognize_google(audio, language='en-in')
        print(f"you said: {query}\n")

    except Exception as e:
        print("Say that again please...")
        print()
        print(e)
        return "None"
    return query


speechinput = takeCommand().lower()

if 'alarm' in speechinput:
    speech("say set alarm for 5:30 am ")
    print("say set alarm for 5:30 am")
    tt = takeCommand()
    tt = tt.replace("set alarm to ", "")
    tt = tt.replace(".", "")
    tt = tt.upper()
    alarm(tt)