import json
import requests
import time
from secrets import spotify_user_id
from refresh import Refresh


class Track_Features:
    def __init__(self):
        self.user_id = spotify_user_id
        self.spotify_token = ""
        self.tracks = ""
        self.new_playlist_id = ""

    def find_songs(self):

        print("Getting Currently Playing track...")

        query = "https://api.spotify.com/v1/me/player/currently-playing"
        headers = {"Content-type": "application/json",
                   "Authorization": "Bearer {}".format(self.spotify_token)}
        response = requests.request("get", url=query, headers=headers)

        if response.status_code == 204:
            print("No Track Playing! - [Re-check in 10 seconds]")
            time.sleep(10)
            print("Refresh Access Token.")
            self.call_refresh()
            query = "https://api.spotify.com/v1/me/player/currently-playing"
            headers={"Content-type": "application/json","Authorization": "Bearer {}".format(self.spotify_token)}
            response = requests.request("get", url=query, headers=headers)

        json_data = json.loads(response.text)
        self.nowtrack = json_data["item"]["uri"]
        self.get_artist = json_data["item"]["album"]["artists"][0]["name"]
        self.track_name = json_data["item"]["name"]
        self.get_album =  json_data["item"]["album"]["name"]
        self.get_year = json_data["item"]["album"]["release_date"][:4]
        self.id = json_data["item"]["id"]

        with open(f"{self.track_name} by {self.get_artist} - Track Features.txt", 'w') as f:
            f.write(f"URI:-  {self.nowtrack}\nArtist:-  {self.get_artist}\nTrack:-  {self.track_name}\nAlbum:-  {self.get_album}\nRelease Date:-  {self.get_year}\n\n\n")
        f.close
        self.track_features()

    def track_features(self):
        print("Getting Track Audio Features.....")

        query = "https://api.spotify.com/v1/audio-features/{}".format(self.id)
        headers = {"Content-type": "application/json",
                   "Authorization": "Bearer {}".format(self.spotify_token)}
        response = requests.request("get", url=query, headers=headers)
        json_data = json.loads(response.text)

        dance = json_data["danceability"]
        energy = json_data["energy"]
        key = json_data["key"]
        loudness = json_data["loudness"]
        mode = json_data["mode"]
        speech = json_data["speechiness"]
        acoustic = json_data["acousticness"]
        instrumental = json_data["instrumentalness"]
        live = json_data["liveness"]
        valence = json_data["valence"]
        tempo = json_data["tempo"]
        duration = json_data["duration_ms"]
        signature = json_data["time_signature"]

        with open(f"{self.track_name} by {self.get_artist} - Track Features.txt", 'a') as f:
            f.write(f"Danceabilty:-  {dance}\n\nEnergy:-  {energy}\n\nKey:-  {key}\n\nLoudness:-  {loudness}\n\nMode:-  {mode}\n\nSpeechiness:-  {speech}\n\nAcousticness:-  {acoustic}\n\nInstrumentalness:-  {instrumental}\n\nLiveness:-  {live}\n\nValence:-  {valence}\n\nTempo:-  {tempo}\n\nDuration (ms):-  {duration}\n\nTime Signature:-  {signature}")
        f.close

    def call_refresh(self):

        print("Refreshing token")
        refreshCaller = Refresh()
        self.spotify_token = refreshCaller.refresh()
        self.find_songs()


a = Track_Features()
a.call_refresh()
