import json, requests, time, sys, os
from datetime import datetime
from secrets import spotify_user_id, radio_id, sunny_id, feed_id
from refresh import Refresh
os.system('mode con: cols=70 lines=30')
temp = 'xxx'
flag = 0
tk = 0

os.system('cls')
print('ALL NEW Now Playing: v22-02-2022')
print('(c) Viking Design Studios')
print('Spotify user ' + spotify_user_id)
print('Displays Now Playing track and played tracks list.')
print('Played track REMOVED from RADIO & SUNNY stations.')
## print('Next track in FEED recycled & added to RADIO.')
## print('(Currently: from FEED pos #1 to pos #4205 ')
print('')
refreshCaller = Refresh()

class NowPlaying:
    def __init__(self):
        self.user_id = spotify_user_id
        self.radio_id = radio_id
        self.feed_id = feed_id
        self.sunny_id = sunny_id
        self.spotify_token = ''
        self.nowtrack = ''
        self.newtrack = ''
        self.artist = ''
        self.title = ''
        self.tracks = ''

    def get_now_playing_track(self):
        global temp, flag, tk
        query = 'https://api.spotify.com/v1/me/player/currently-playing'
        response = requests.request('get', url=query, headers={'Content-type': 'application/json','Authorization': 'Bearer {}'.format(self.spotify_token)})
        
        if response.status_code == 204:
            if flag == 0:
                print('NOTHING PLAYING')
                temp = 'xxx'
                flag = 1
            time.sleep(45)
            self.call_refresh()
            return

        flag = 0
        json_data = json.loads(response.text)
        self.nowtrack = json_data['item']['uri']
        self.artist = json_data['item']['album']['artists'][0]['name']
        self.title = json_data['item']['name']

        if temp != self.nowtrack:
            prevtrack = temp
            temp = self.nowtrack 
            self.call_refresh()
            self.nowtrack = prevtrack
            self.played_track_manager()


    def played_track_manager(self):
        global tk
        if self.nowtrack != 'xxx':
            if self.title == '':
                tk = 0
                print('[X] Removes tracks from RADIO & SUN LOUNGE playlists:')
                print('[Shortly after Start of Play of FOLLOWING track].')
            else:
                tk = tk + 1
                print('[' + str(tk) + '] ' + self.title + ' - ' + self.artist)
                self.remove_track_from_stations()

        while True:
            time.sleep(20)
            self.get_now_playing_track()
            

    def remove_track_from_stations(self):
        query = 'https://api.spotify.com/v1/playlists/{}/tracks'.format(self.radio_id)  
        response = requests.request('delete', url=query, headers={'Content-type': 'application/json','Authorization':'Bearer {}'.format(self.spotify_token)}, data=json.dumps({'tracks': [{'uri': self.nowtrack}]}))

        query = 'https://api.spotify.com/v1/playlists/{}/tracks'.format(self.sunny_id)  
        response = requests.request('delete', url=query, headers={'Content-type': 'application/json','Authorization':'Bearer {}'.format(self.spotify_token)}, data=json.dumps({'tracks': [{'uri': self.nowtrack}]}))


    def call_refresh(self):
        global refreshCaller
        while True:
            self.spotify_token = refreshCaller.refresh()
            if self.spotify_token == -1:   # NOTE: Check for '-1' returned from refresh class.
                print('[X] Error Refreshing Token - Retrying in 30 Secs [X]')
                time.sleep(30)
            else:
                break

a = NowPlaying()
a.call_refresh()
a.played_track_manager()
