import os
import json
import requests
import time
#import shuffle
from secrets import spotify_user_id, feed_id, queue_id
from refresh import Refresh

'''
Original concept, API format and code fixes, courtesy of Euan Morgan. https://euanmorgan.github.io
Ideas spawned by YouTube video https://www.youtube.com/watch?v=jzH3n5GvmoA
See 'about-main.py' and 'about-shuffle.py' for more details.
'''

os.system('cls')
#print("[•_•] BOTIFY - QUEUE & FEED PLAYLIST MANAGER.")
#print("New Edition: 19-FEB-2021 @ 18:00 (c) Viking Design.")
#print("User: " + spotify_user_id)
refreshCaller = Refresh()

class RunBotify:
    def __init__(self):
        self.user_id = spotify_user_id
        self.que_playlist_id = queue_id
        self.fed_playlist_id = feed_id
        self.spotify_token = ""
        self.tracks = ""

    def get_tracks_from_feed(self):
        # NOTE: (1) Set number of tracks to get from FEED to populate your play QUEUE playlist.
        queue_max = 50
        if queue_max == 0:
            queue_max = 1
        if queue_max > 100:
            queue_max = 100
        #params={"limit":queue_max}
        #print("[•] Get '" + str(queue_max) + "' tracks from FEED playlist...")
        #query = "https://api.spotify.com/v1/playlists/{}/tracks".format(self.fed_playlist_id)
        #response = requests.request("get", url=query, headers={"Content-type": "application/json","Authorization":"Bearer {}".format(self.spotify_token)},params=params)
        #response_json = response.json()

        params={"limit":queue_max}
        query = "https://api.spotify.com/v1/users/{}/playlists".format(self.user_id)
        response = requests.request("get", url=query, headers={"Content-type": "application/json","Authorization":"Bearer {}".format(self.spotify_token)},params=params)
        response_json = response.json()

        json_data = json.loads(response.text)

        for i in json_data["items"]:
            self.name = (i["name"])
            self.total = (i["tracks"]["total"])
            self.misc = (i["external_urls"])
            #self.des = (i[0]["description"])
            print(self.name)
            print(self.total)
            print(self.misc)
            #print(json_data(i[1]["description"]))
            #print(response_json)

            
        #print(json_data["items"][0]["track"]["popularity"])
            #print(json_data(i["uri"]))
        #print(json_data["items"][0]["album"]["artists"][0]["name"])
        #print(json_data["items"][0]["album"]["name"])
    
        print("=================================================")
        #print(json_data["items"][0]["external_urls"])
        #print(json_data["items"][0]["description"])
        #print(json_data["items"][0]["external_urls"]["spotify"])
        #print(json_data["items"][0]["href"])
        #print(json_data["items"][0]["id"])
        #print(json_data["items"][0]["images"][0]["url"])
        #print(json_data["items"][0]["images"][1]["url"])
        #print(json_data["items"][0]["images"][2]["url"])
        #print(json_data["items"][0]["name"])
        #print(json_data["items"][0]["owner"])
        print(json_data["items"][0]["uri"])
        #print(json_data["href"])
        #print(json_data["limit"])
        #print(json_data["next"])
        #print(json_data["offset"])
        #print(json_data["previous"])
        #print(json_data["total"])
        #print(json_data["items"][0]["added_at"])
        #print(json_data["items"][0]["added_by"]["id"])
        #print(json_data["items"][0]["added_by"]["uri"])
        #print(json_data["items"][0]["added_by"]["href"])
        #print(json_data["items"][0]["is_local"])
        #print(json_data["items"][0]["primary_color"])
        #print(json_data["items"][0]["track"]["name"])
        #print(json_data["items"][0]["track"]["album"]["album_type"])        
        #print(json_data["items"][0]["track"]["album"]["artists"][0]["external_urls"])
        #print(json_data["items"][0]["track"]["album"]["artists"][0]["external_urls"]["spotify"])
        #print(json_data["items"][0]["track"]["album"]["artists"][0]["href"])
        #print(json_data["items"][0]["track"]["album"]["artists"][0]["type"])
        #print(json_data["items"][0]["track"]["album"]["artists"][0]["id"])
        #print(json_data["items"][0]["track"]["album"]["artists"][0]["name"])
        #print(json_data["items"][0]["track"]["album"]["artists"][0]["uri"])
        #print(json_data["items"][0]["track"]["album"]["available_markets"])
        #print(json_data["items"][0]["track"]["album"]["external_urls"])
        #print(json_data["items"][0]["track"]["album"]["external_urls"]["spotify"])
        #print(json_data["items"][0]["track"]["album"]["href"])
        #print(json_data["items"][0]["track"]["album"]["id"])
        #print(json_data["items"][0]["track"]["album"]["uri"])
        #print(json_data["items"][0]["track"]["album"]["name"])
        #print(json_data["items"][0]["track"]["album"]["images"][0]["url"])
        #print(json_data["items"][0]["track"]["album"]["images"][1]["url"])
        #print(json_data["items"][0]["track"]["album"]["images"][2]["url"])
        #print(json_data["items"][0]["track"]["album"]["release_date"])
        #print(json_data["items"][0]["track"]["album"]["release_date_precision"])
        #print(json_data["items"][0]["track"]["album"]["total_tracks"])
        #print(json_data["items"][0]["track"]["album"]["type"])
        #print(json_data["items"][0]["track"]["duration_ms"])
        #print(json_data["items"][0]["track"]["popularity"])
        #print(json_data["items"][0]["track"]["artists"][0]["external_urls"])
        #print(json_data["items"][0]["track"]["artists"][0]["external_urls"]["spotify"])
        #print(json_data["items"][0]["track"]["artists"][0]["id"])
        #print(json_data["items"][0]["track"]["artists"][0]["name"])
        #print(json_data["items"][0]["track"]["artists"][0]["type"])
        #print(json_data["items"][0]["track"]["artists"][0]["uri"])
        #print(json_data["items"][0]["track"]["available_markets"])
        #print(json_data["items"][0]["track"]["disc_number"])
        #print(json_data["items"][0]["track"]["duration_ms"])
        #print(json_data["items"][0]["track"]["episode"])
        #print(json_data["items"][0]["track"]["explicit"])
        #print(json_data["items"][0]["track"]["external_ids"])
        #print(json_data["items"][0]["track"]["external_ids"]["isrc"])
        #print(json_data["items"][0]["track"]["external_urls"])
        #print(json_data["items"][0]["track"]["external_urls"]["spotify"])
        #print(json_data["items"][0]["track"]["href"])
        #print(json_data["items"][0]["track"]["id"])
        #print(json_data["items"][0]["track"]["is_local"])
        #print(json_data["items"][0]["track"]["name"])
        #print(json_data["items"][0]["track"]["popularity"])
        #print(json_data["items"][0]["track"]["preview_url"])
        #print(json_data["items"][0]["track"]["track"])
        #print(json_data["items"][0]["track"]["track_number"])
        #print(json_data["items"][0]["track"]["type"])
        #print(json_data["items"][0]["track"]["uri"])
        #print(json_data["items"][0]["video_thumbnail"])
        #print(json_data["items"][0]["video_thumbnail"]["url"])


        #print(json_data)
        #print(json_data["items"][0]["track"]["album"])
        #print(json_data["items"][0]["uri"])
        #print(json_data["items"][0]["album"]["artists"][0]["name"])
        #print("---")
        #
        #print(json_data)
        #print("---")





        #for i in response_json["items"]:
        #    self.tracks += i["track"]["uri"] + ","
 #           print(i["track"]["name"])
        #self.tracks = self.tracks[:-1]
        exit()
        self.add_track_to_queue()
   
    def add_track_to_queue(self):
        # NOTE: (2) POST appends (adds to) and PUT replaces (removes) amy tracks in QUEUE.
        print("[•] Copying the FEED tracks to QUEUE...")
        query = "https://api.spotify.com/v1/playlists/{}/tracks?uris={}".format(self.que_playlist_id, self.tracks)
        response = requests.request("post", url=query, headers={"Content-type": "application/json","Authorization":"Bearer {}".format(self.spotify_token)})
        self.remove_tracks_from_feed()

    def remove_tracks_from_feed(self):
        print("[•] Removing tracks from the FEED playlist...")
        # print(">> URL's to DELETE: " + self.tracks)

        tracks_to_delete = []
        tmp_tracks = self.tracks.split(",")
        for i in tmp_tracks:
            tracks_to_delete.append({"uri":i})
        # print({"tracks": tracks_to_delete})

        query = "https://api.spotify.com/v1/playlists/{}/tracks".format(self.fed_playlist_id)
        response = requests.request("delete", url=query, headers={"Content-type": "application/json","Authorization":"Bearer {}".format(self.spotify_token)}, data=json.dumps({"tracks": tracks_to_delete}))
        print("[•] All done!")

    def call_refresh(self):
        print("[•] Refreshing Token....")
        global refreshCaller
        while True:
            self.spotify_token = refreshCaller.refresh()
            if self.spotify_token == -1:
                print("[X] Error Refreshing Token - Retrying in 30 Secs [X]")
                time.sleep(30)
            else:
                break

a = RunBotify()
a.call_refresh()
a.get_tracks_from_feed()
