import pyttsx3
import datetime
import speech_recognition as sr
import wikipedia
import smtplib
import webbrowser as wb
import os
import pyautogui
import psutil
import pyjokes

engine = pyttsx3.init()

def speak(audio):
    engine.say(audio)
    engine.runAndWait()

def time():
    Time = datetime.datetime.now().strftime("%H:%M:%S")
    speak("The current time is:")
    speak(Time)

def date():
    Year=int(datetime.datetime.now().year)
    Month=int(datetime.datetime.now().month)
    Date=int(datetime.datetime.now().day)
    speak("The current date is:")
    speak(Date)
    speak(Month)
    speak(Year)

def wishme():
    speak("Welcome Back Aayush Sir!")
    hour=datetime.datetime.now().hour
    if hour>=6 and hour<=12:
        speak("Good Morning!")
    elif hour>=12 and hour<=17:
        speak("Good Afternoon!")
    elif hour>=17 and hour<=19:
        speak("Good Evening!")
    speak("This is Jarvis")

def take_cmd():
    R = sr.Recognizer()
    with sr.Microphone() as source:
        print("Listening...")
        R.pause_threshold = 1
        audio = R.listen(source)

    try:
        print("Recognizing...")
        Query = R.recognize_google(audio, language="en-in")
        print(Query)
    
    except Exception as e:
        print(e)
        speak("Sorry, I beg your pardon sir!")
        return "None"
    
    return Query

def send_email(to,content):
    server = smtplib.SMTP('smtp.gmail.com',587)
    server.ehlo()
    server.starttls()
    server.login('[email protected]','Ayush@123')
    server.sendmail('[email protected]',to,content)
    server.close()

def screenshot():
    img = pyautogui.screenshot()
    img.save("C:\\Users\\Ayush Sharma\\Downloads\\Photos\\Jarvis_ss.png")

def cpu():
    usage = str(psutil.cpu_percent())
    speak("CPU is working at" + usage + "Percentage")

def battery():
    battery = psutil.sensors_battery()
    speak("Reamining battery percentage is")
    speak(battery.percent)

def jokes():
    speak(pyjokes.get_joke())

if __name__ == "__main__":
    wishme()
    while True:
        speak("What should I do Sir?")
        Query = take_cmd().lower()
        
        if 'time' in Query:
            time()
        
        elif 'date' in Query:
            date()
        
        elif 'search' in Query:
            speak("Searching...")
            print("Searching...")
            Query = Query.replace("wikipedia","")
            result = wikipedia.summary(Query, sentences=2)
            print(result)
            speak(result)
        
        elif 'email' in Query:
            try:
                speak("What is your message sir?")
                content =  take_cmd()
                to = '[email protected]'
                send_email(to,content)
                speak("Email has been successfully sent")
            except Exception as e:
                print(e)
                speak("I wasn't able to send the email sir!")
        
        elif 'chrome' in Query:
            speak("What should I search sir?")
            search = take_cmd().lower()
            wb.get("C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s").open_new_tab(search + '.com')
        
        elif 'logout' in Query:
            os.system("shutdown -1")

        elif 'shutdown' in Query:
            os.system("shutdown /s /t 1")

        elif 'restart' in Query:
            os.system("shutdown /r /t 1")
        
        elif 'songs' in Query:
            songs = os.listdir('G:\\Music')
            os.startfile(os.path.join('G:\\Music', songs[0]))
        
        elif 'remember that' in Query:
            speak("What should I remember sir?")
            data = take_cmd()
            speak("You've told me to remember that" + data)
            remember = open('data.txt','w')
            remember.write(data)
            remember.close()
        
        elif 'to remember' in Query:
            remember = open('data.txt','r')
            speak("You told me to remember that" + remember.read())
        
        elif 'screenshot' in Query:
            screenshot()
            speak("Took the screenshot sir!")
        
        elif 'cpu' in Query:
            cpu()
        
        elif 'battery' in Query:
            battery()

        elif 'joke' in Query:
            jokes()

        elif 'offline' in Query:
            speak("Okay sir")
            quit()