#!/usr/bin/env python
#from __future__ import unicode_literals

from grattify import *
import sys, os

SPOTIPY_CLIENT_ID = "6ddf2f4253a847c5bac62b17cd735e66"
SPOTIPY_CLIENT_SECRET = "5b54de875ad349f3bb1bbecd5832f276"
SPOTIPY_REDIRECT_URI = "tabatest://callback"

#MAIN EXECUTION

failedDownloads = []
if len(sys.argv) > 2: #using command line arguments
	if sys.argv[1] == "-album" or sys.argv[1] == "-a":
		album = sys.argv[2]
		artist = sys.argv[3]
		saveDir = album
		if not os.path.exists(saveDir):
			os.makedirs(saveDir)
		tracks = getAlbum(artist,album)
		for i,track in enumerate(tracks):
			print "\nDOWNLOADING SONG %d / %d\n" % (i+1,len(tracks))
			if not downloadSong(track,artist,1,saveDir):
				failedDownloads.append((track,artist))

	if sys.argv[1] == "-song" or sys.argv[1] == "-s":
		saveDir = "songFolder"
		if not os.path.exists(saveDir):
			os.makedirs(saveDir)
		artist = sys.argv[2]
		song = sys.argv[3]
		if not downloadSong(song,artist,1,saveDir):
			failedDownloads.append((song,artist))

	if sys.argv[1] == "-top" or sys.argv[1] == "-t":
		n = int(sys.argv[2])
		artist = sys.argv[3]
		saveDir = artist + "_Top_"+sys.argv[2]
		if not os.path.exists(saveDir):
			os.makedirs(saveDir)
		tracks = getTopN(artist,n)
		for i,track in enumerate(tracks):
			print "\nDOWNLOADING SONG %d / %d\n" % (i+1,len(tracks))
			if not downloadSong(track,artist,1,saveDir):
				failedDownloads.append((track,artist))

	if sys.argv[1] == "-file" or sys.argv[1] == "-f":
		inFile = file(sys.argv[2])
		saveDir = sys.argv[2][:sys.argv[2].find('.')]
		if not os.path.exists(saveDir):
			os.makedirs(saveDir)
		lines = inFile.readlines()
		try:
			attempt = int(lines[0].strip())
		except:
			attempt = 1
		for line in lines:
			print "\nDOWNLOADING LINE %d / %d\n" % (i+1,len(lines))
			songParts = line.split(",")
			if line[:6].lower()=="album:": #Album:the wall,pink floyd
				artist = songParts[-1]
				album = ",".join(songParts[:-1])
				album=album[6:]
				tracks = getAlbum(artist,album)
				for track in tracks:
					if not downloadSong(track,artist,attempt,saveDir):
						failedDownloads.append((track,artist))
			if line[:3].lower()=="top": #top 5:pink floyd
				colonIndex=line.find(':')
				artist = line[colonIndex+1:]
				n = int(line[3:colonIndex].strip())
				if n:
					tracks = getTopN(artist,n)
				else:
					print "SYNTAX ERROR: "+line
					print "SKIPPING"
				for track in tracks:
					if not downloadSong(track,artist,attempt,saveDir):
						failedDownloads.append((track,artist))
			else: #hey you,pink floyd
				artist = songParts[0]
				track = ",".join(songParts[1:])
				if not downloadSong(track,artist,attempt,saveDir):
					failedDownloads.append((track,artist))

	if sys.argv[1] == "-spotify" or sys.argv[1] == "-sp":
		saveDir = "SpotifySongs"
		if not os.path.exists(saveDir):
			os.makedirs(saveDir)
		username = sys.argv[2]
		tracks = getSpotifyPlaylists(username)
		for i,track in enumerate(tracks):
			print "\nDOWNLOADING SONG %d / %d\n" % (i+1,len(tracks))
			if not downloadSong(track[1],track[0],1):
				failedDownloads.append((track[1],track[0]))

	if sys.argv[1] == "-pandora" or sys.argv[1] == "-p":
		saveDir = "Pandora_Liked_Songs"
		if not os.path.exists(saveDir):
			os.makedirs(saveDir)
		pandoraFile = sys.argv[2]
		tracks = parsePandoraLikes(pandoraFile)
		for i,track in enumerate(tracks):
			print "\nDOWNLOADING SONG %d / %d\n" % (i+1,len(tracks))
			if not downloadSong(track[0],track[1],1,saveDir):
				failedDownloads.append((track[0],track[1]))

	if sys.argv[1] == "-debug":
		ms = compare(sys.argv[2],sys.argv[3])
		print "%d Changes" % len(ms)
		for m in ms:
			print m

	print "Failed: ",failedDownloads if len(failedDownloads) > 0 else "All songs downloaded!"
else:
	print "USAGE:"
	print '-spotify "user@email.com"'
	print '-song "The Beatles" "Come Together"'
	print '-album "Abbey Road" "The Beatles"'
	print '-top 5 "The Beatles"'
	print '-file "songList.txt"'




	
#TODO:
#format saved files to recognize name and artist
#package libraries
#multithreading?
#replace all non alphanumeric characters? or at least apostrophes
#chrome extension to download song currently being listened to

	




	