# coding: latin-1

import os
from time import time
#from googleapiclient.discovery import build
from requests.api import get
from json import load,dumps
from credentials import KEY


#commande test : "yt-dlp -f 'ba' -x --audio-format mp3 https://www.youtube.com/watch?v=zA2YBT9z6pA -o '%(id)s.mp3' "


caracteres = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_=+\';!?$%&#~<> "
remplacements = {"(":"-" , ")": "-" , "\"" : "\'","�":"e","�":"a","�":"e","�":"u","�":"e","�":"a","�":"o","�":"o" ,"�":"o","�":"i","�":"u","�":"U","/":" "}

def replace(caract,remplacements) :
    if caract in remplacements.keys() :
        return remplacements[caract]
    else :
        return caract

#Supprimer tous les caracteres interdits
def garde(chn,caracteres):
    print("filtrage de : "+chn) 
    res = ("".join([x for x in chn if x in caracteres]) ) 
    return res

def remplacer(chn,remplacements):
    res =  ("".join([replace(x,remplacements) for x in chn]))  
    print("type(res) : "+ str(type(res)) ) 
    return res



def addplaylist(playlistid):
    os.chdir("/mnt/usb/bleezrdata")
    chn = 'https://www.googleapis.com/youtube/v3/playlists?part=snippet&id='+playlistid+'&key='+KEY
    dico = get(chn).json()
    playlistname = dico["items"][0]["snippet"]["title"] 
    

    with open("playlistinfo.json",'r') as f :
        data = load(f)

        if not playlistid in [x['id'] for x in data] :
            data.append({'id':playlistid,'name':playlistname}) 
    
	    
        with open("playlistinfo.json",'w') as f :
            f.write(dumps(data)) 

    with open("playlists.json",'r') as f :
        data = load(f)
	
        if not playlistid in data:
            data.append(playlistid)  
    
	    
        with open("playlists.json",'w') as f :
            f.write(dumps(data)) 



addplaylist("PL8V2Ld0Is1-kUaNtXmvYGtYoyZ0O2aqDt") 

os.chdir("/mnt/usb/bleezrdata")

t = time()
while True :
    tt = time()
    if tt - t > 60. :
        
        print("actualisation ...")
        os.system('sudo echo "\n la dernière actualisation date de : " >> history.txt')
        os.system('date >> history.txt')
        t = tt
        with open("playlists.json",'r') as f :
            
            data = load(f)
            for playlist in data :
                
                if playlist not in os.listdir("musics"):
                    print("La playlist " + playlist + " n\'est pas dans le repertoire" )
		    os.chdir("musics")

                    os.mkdir(playlist)
                    os.chdir(playlist)
                    #On remplit le dossier de cette playlist
                    os.mkdir("contents")
                    with open("seen.json",'w') as f :
                        f.write("[]")
                    with open("seen_names.json",'w') as f :
                        f.write("[]")

                    os.chdir("../..")

                #A supprimer lorsque tout le code aura �t� fait proprement
                if "seen_names.json" not in os.listdir("musics/"+playlist):
                    print("seen_names.json n\'est pas dans le r�pertoire de la playlist") 
		    with open("musics/"+playlist+"/seen_names.json",'w') as f :
                        f.write("[]")

                os.chdir("musics/"+playlist)
                chn = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=25&playlistId='+playlist+'&key='+KEY
                print(chn)
                requete = get(chn)
                dico = requete.json()
                all_videos = [x['snippet']['resourceId']['videoId'] for x in dico['items']]
                all_videos_names = [x['snippet']['title'] for x in dico['items']]
                #print("longueur de all_videos : {}".format(len(all_videos)))
                with open('seen.json','r') as f2 :
                    seen_videos = load(f2)
                with open('seen_names.json','r') as f3 :
                    seen_videos_names = load(f3)

                os.chdir("contents")
                i = 0
                while i < len(all_videos) and all_videos[i] not in seen_videos :
                    vid = all_videos[i]
                    vid_name = garde(remplacer(all_videos_names[i],remplacements),caracteres)
                    print(vid)
                    print(vid_name)
                    #command = "yt-dlp -f 'ba' -x --audio-format mp3 https://www.youtube.com/watch?v={0} -o '%(title)s.mp3' ".format(vid)
                    command = "yt-dlp -f 'ba' -x --audio-format mp3 https://www.youtube.com/watch?v={0} -o \"{1}.mp3\"".format(vid,vid_name)
                    print(command)    
                    os.system(command)

                    if vid_name+".mp3" in os.listdir(".") :
                        seen_videos.append(vid)
                        seen_videos_names.append(vid_name)
                    i += 1
                os.chdir("../")

                with open('seen.json','w') as f2 :
                    f2.write(dumps(seen_videos))

                with open('seen_names.json','w') as f :
                    f.write(dumps(seen_videos_names))

                os.chdir("../")
                os.chdir("../")
 
"""
playlist = "PL8V2Ld0Is1-kWGtqHFOJiwwnU1lWbpC1r"
chn = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=25&playlistId='+playlist+'&key='+KEY
requete = get(chn)


dico = requete.json()
l = dico['items']
print([x['snippet']['resourceId']['videoId'] for x in l])
"""