from tkinter import *
import os
from tkinter import filedialog
import tkinter
from tkinter import ttk

root = None
active_window = None

root = tkinter.Tk()
root.title('spotify-downloader-music-player')

# Set the configuration of GUI window  
root.geometry("700x175") 

# Function for song name
def songnamee():
    frame1 = Frame(root, borderwidth=2, relief='ridge')  
    frame2 = Frame(root, borderwidth=2, relief='ridge')  
    frame3 = Frame(root, borderwidth=2, relief='ridge')
    frame4 = Frame(root, borderwidth=0, relief='ridge')
    frame5 = Frame(root, borderwidth=0, relief='ridge')
    frame6 = Frame(root, borderwidth=0, relief='ridge')
     
    frame1.grid(column=0, row=0, sticky="nsew")  
    frame2.grid(column=0, row=1, sticky="nsew")  
    frame3.grid(column=0, row=2, sticky="nsew")
    frame4.grid(column=1, row=0, sticky="nsew")
    frame5.grid(column=2, row=0, sticky="nsew")
    frame6.grid(column=2, row=1, sticky="nsew")

    menu = Menu(root) 
    root.config(menu=menu) 
    filemenu = Menu(menu) 
    menu.add_cascade(label='Download Type', menu=filemenu) 
    filemenu.add_command(label='Song Name', command=songnamee) 
    filemenu.add_command(label='Youtube Link', command=youtubelink) 
    filemenu.add_command(label='File', command=file) 
         
    home = Button(frame1, text="HOME",width=15, command=songnamee)  
    playlist = Button(frame2, text="PLAYLIST",width=15, command=playlistbackground)  
    about = Button(frame3, text="ABOUT",width=15, command=aboutbackground)
    songName = Entry(frame4, width=40)
    download = Button(frame5, text="Download", command=lambda: downloadname(songName))
    progress = ttk.Progressbar(frame6,orient ="horizontal",length = 200, mode ="determinate")
     
    home.pack(fill='x')  
    playlist.pack(fill='x')  
    about.pack(fill='x')
    songName.pack()
    download.pack()
    progress.pack()
     
    root.mainloop() 

# Function for youtube link button
def youtubelink():
    frame1 = Frame(root, borderwidth=2, relief='ridge')  
    frame2 = Frame(root, borderwidth=2, relief='ridge')  
    frame3 = Frame(root, borderwidth=2, relief='ridge')
    frame4 = Frame(root, borderwidth=0, relief='ridge')
    frame5 = Frame(root, borderwidth=0, relief='ridge')
    frame6 = Frame(root, borderwidth=0, relief='ridge')
     
    frame1.grid(column=0, row=0, sticky="nsew")  
    frame2.grid(column=0, row=1, sticky="nsew")  
    frame3.grid(column=0, row=2, sticky="nsew")
    frame4.grid(column=1, row=0, sticky="nsew")
    frame5.grid(column=2, row=0, sticky="nsew")
    frame6.grid(column=3, row=1, sticky="nsew")

    menu = Menu(root) 
    root.config(menu=menu) 
    filemenu = Menu(menu) 
    menu.add_cascade(label='Download Type', menu=filemenu) 
    filemenu.add_command(label='Song Name', command=songnamee) 
    filemenu.add_command(label='Youtube Link', command=youtubelink) 
    filemenu.add_command(label='File', command=file) 
         
    home = Button(frame1, text="HOME",width=15, command=youtubelink)  
    playlist = Button(frame2, text="PLAYLIST",width=15, command=playlistbackground)  
    about = Button(frame3, text="ABOUT",width=15, command=aboutbackground)
    songLink = Entry(frame4, width=40)
    download = Button(frame5, text="Download", command=lambda: downloadlink(songLink))
     
    home.pack(fill='x')  
    playlist.pack(fill='x')  
    about.pack(fill='x')
    songLink.pack()
    download.pack()

# Function for file button
def file():
    frame1 = Frame(root, borderwidth=2, relief='ridge')  
    frame2 = Frame(root, borderwidth=2, relief='ridge')  
    frame3 = Frame(root, borderwidth=2, relief='ridge')
    frame4 = Frame(root, borderwidth=0, relief='ridge')
    frame5 = Frame(root, borderwidth=0, relief='ridge')
    frame6 = Frame(root, borderwidth=0, relief='ridge')
     
    frame1.grid(column=0, row=0, sticky="nsew")  
    frame2.grid(column=0, row=1, sticky="nsew")  
    frame3.grid(column=0, row=2, sticky="nsew")
    frame4.grid(column=1, row=0, sticky="nsew")
    frame5.grid(column=2, row=0, sticky="nsew")
    frame6.grid(column=3, row=1, sticky="nsew")

    menu = Menu(root) 
    root.config(menu=menu) 
    filemenu = Menu(menu) 
    menu.add_cascade(label='Download Type', menu=filemenu) 
    filemenu.add_command(label='Song Name', command=songnamee) 
    filemenu.add_command(label='Youtube Link', command=youtubelink) 
    filemenu.add_command(label='File', command=file)  
         
    home = Button(frame1, text="HOME",width=15, command=file)  
    playlist = Button(frame2, text="PLAYLIST",width=15, command=playlistbackground)  
    about = Button(frame3, text="ABOUT",width=15, command=aboutbackground)
    filetxt = Entry(frame4, width=40)
    download = Button(frame5, text="Download", command=lambda: downloadfile(filetxt))
     
    home.pack(fill='x')  
    playlist.pack(fill='x')  
    about.pack(fill='x')
    filetxt.pack()
    download.pack()

# Function for about button
def aboutbackground():
    frame1 = Frame(root, borderwidth=2, relief='ridge')  
    frame2 = Frame(root, borderwidth=2, relief='ridge')  
    frame3 = Frame(root, borderwidth=2, relief='ridge')
    frame4 = Frame(root, borderwidth=0, relief='ridge')
    frame5 = Frame(root, borderwidth=0, relief='ridge')
    frame6 = Frame(root, borderwidth=0, relief='ridge')
     
    frame1.grid(column=0, row=0, sticky="nsew")  
    frame2.grid(column=0, row=1, sticky="nsew")  
    frame3.grid(column=0, row=2, sticky="nsew")
    frame4.grid(column=1, row=0, sticky="nsew")
    frame5.grid(column=1, row=1, sticky="nsew")
    frame6.grid(column=1, row=2, sticky="nsew")
     
    home = Button(frame1, text="HOME",width=15, command=youtubelink)  
    playlist = Button(frame2, text="PLAYLIST",width=15, command=playlistbackground)  
    about = Button(frame3, text="ABOUT",width=15, command=aboutbackground)
    Label(frame4, text="A GUI version of spotify-downloder of Ritiek Malhotra.").pack()
    Label(frame5, text="It can download music from YouTube in MP3 format and can play them.").pack()
    Label(frame6, text="It can download songs directly by typing name or typing the link.").pack()
     
    home.pack(fill='x')  
    playlist.pack(fill='x')  
    about.pack(fill='x')

# Function for playlist button
def playlistbackground():
    frame1 = Frame(root, borderwidth=2, relief='ridge')  
    frame2 = Frame(root, borderwidth=2, relief='ridge')  
    frame3 = Frame(root, borderwidth=2, relief='ridge')
    frame4 = Frame(root, borderwidth=0, relief='ridge')
    frame5 = Frame(root, borderwidth=0, relief='ridge')
    frame6 = Frame(root, borderwidth=0, relief='ridge')
     
    frame1.grid(column=0, row=0, sticky="nsew")  
    frame2.grid(column=0, row=1, sticky="nsew")  
    frame3.grid(column=0, row=2, sticky="nsew")
    frame4.grid(column=1, row=0, sticky="nsew")
    frame5.grid(column=2, row=0, sticky="nsew")
    frame6.grid(column=2, row=1, sticky="nsew")

    folder_path = StringVar()
    home = Button(frame1, text="HOME",width=15, command=youtubelink)  
    playlist = Button(frame2, text="PLAYLIST",width=15, command=playlistbackground)  
    about = Button(frame3, text="ABOUT",width=15, command=aboutbackground)
    Label(frame4, text=" select song         ").pack()
    choose = Button(frame5, text="choose", command=browse_button)
     
    home.pack(fill='x')  
    playlist.pack(fill='x')  
    about.pack(fill='x')
    choose.pack()

# function for song download by name
def downloadname(songName):
    musicname="spotdl --song \"allen walker - faded\""
    os.system(musicname)

# function for song downloading
def downloadlink(songLink):
    musiclink="spotdl -s https://www.youtube.com/watch?v=dfnCAmr569k"
    os.system(musiclink)

# function for song downlaod by file
def downloadfile(filetxt):
    txtfile="spotdl --list "+filetxt.get()
    os.system(txtfile)

def browse_button():
    # Allow user to select a directory and store it in global var
    # called folder_path
    global folder_path
    filename = filedialog.askdirectory()
    folder_path.set(filename)
    print(filename)

if __name__ == '__main__':
    songnamee()
    downloadlink()