from refresh import Refresh
import json, requests, time

refreshCaller = Refresh()

class unplay:
    def __init__(self):
        self.spotify_token = ""
        self.market = "GB"
        #self.unplayable_playlist = "1OO6i34tI8y4ou3Kj5QNXI" #freddie
        self.unplayable_playlist = "16LNyR7jey9WIQytgeW44F" #ollie
        # NOTE Playlist to be checked here
        self.playlist_to_check = "7fwb38oDmFR2MJPmNazdLK"

    def avail_test(self):
        self.get_source_info()
        self.clear_playlist()
        self.check_source_tracks()
        print()
        print()

    def get_source_info(self):
        query = "https://api.spotify.com/v1/playlists/{}".format(self.playlist_to_check)
        response = requests.request("get", url=query, headers={"Content-type": "application/json", "Authorization": "Bearer {}".format(self.spotify_token)})
        json_data = json.loads(response.text)
        self.queue_total = (json_data["tracks"]["total"])

    def clear_playlist(self):
        query = "https://api.spotify.com/v1/playlists/{}/tracks?uris={}".format(self.unplayable_playlist, "spotify:track:3lpDrxUkr0tIe1kmJvdK7d")
        response = requests.request("put", url=query, headers={"Content-type": "application/json", "Authorization": "Bearer {}".format(self.spotify_token)})
        query = "https://api.spotify.com/v1/playlists/{}/tracks".format(self.unplayable_playlist)
        response = requests.request("delete", url=query, headers={"Content-type": "application/json", "Authorization": "Bearer {}".format(self.spotify_token)}, data=json.dumps({"tracks": [{"uri": "spotify:track:3lpDrxUkr0tIe1kmJvdK7d"}]}))
        #print(response)
        return

    def check_source_tracks(self):

        t = 0
        while t < self.queue_total:
            self.offset = t
            query = "https://api.spotify.com/v1/playlists/{}/tracks".format(self.playlist_to_check)
            response = requests.request("get", url=query, headers={"Content-type": "application/json", "Authorization": "Bearer {}".format(self.spotify_token)}, params={"limit": 1, "market": self.market, "offset": self.offset})
            json_data = json.loads(response.text)
            self.not_playable = json_data["items"][0]["track"]["is_playable"]
            self.track_uri = json_data["items"][0]["track"]["uri"]
            if not self.not_playable:
                self.add_to_playlist()
            t = t + 1
            print("Working on Track " + str(t) + " of " + str(self.queue_total) + " ", end='\r')
            continue
        #except:
        #        print()
        #        print("Error at " + str(t) + " - " + str(self.track_uri) + " - " + str(self.not_playable))
        #        print(TypeError)
        #        t = t-2

    def add_to_playlist(self):
        query = "https://api.spotify.com/v1/playlists/{}/tracks?uris={}".format(self.unplayable_playlist, self.track_uri)
        response = requests.request("post", url=query, headers={"Content-type": "application/json","Authorization":"Bearer {}".format(self.spotify_token)})

    def call_refresh(self):
        global refreshCaller
        while True:
            self.spotify_token = refreshCaller.refresh()
            if self.spotify_token == -1:
                print("==============================\n[!] Error refreshing token, retrying in 30 Seconds\n==============================")
                time.sleep(30)
            else:
                break

a = unplay()
a.call_refresh()
a.avail_test()