import json, time, requests
from secrets import spotify_user_id, feed_id, mixer_id
from refresh import Refresh

class MoveTracks:
    def __init__(self):
        self.user_id = spotify_user_id
        self.mixer_id = mixer_id 
        self.feed_id = feed_id
        self.spotify_token = ''
        self.tracks = ''

    def get_tracks_from_feed(self):
        with open('tracks_tot.txt') as file:
            tracks_tot = int(file.read())
        
        queue_max = (60 - tracks_tot)
        if tracks_tot > 59 :
            print('[05] Tracks at max (no top-up required).')
            print('')
            exit()

        
        ## FEED PROGRESS DATA: NEW 12-02-2022.
        ## Tracks to add = queue_max.

        ## Get FEED track progress.
        with open('progress.txt') as file:
             prog_tot = int(file.read())
        ## print('Progress =  ' + str(prog_tot))

        ## Add new tracks total to progress total.
        prog_tot = prog_tot + queue_max
        ## print('Prog_tot plus tracks_tot = ' + str(prog_tot))

        ## Get latest FEED total.
        with open('feed_tot.txt') as file:
            feed_tot = int(file.read())
        ## print('Feed tot = ' + str(feed_tot))

        ## Check FEED prgress against FEED total'
        if prog_tot > feed_tot:
            new_progress_tot = 0
            print('** FEED Progress RESET **')
        else:
            new_progress_tot = prog_tot
        ## print('New progress tot = ' + str(new_progress_tot))

        ## Write / save new progress total.
        f = open("progress.txt", "w")
        f.write(str(new_progress_tot))
        f.close()
    
        ## Calc total of FEED tracks yet to play.
        xx = (feed_tot - prog_tot)
        print('[05] FEED tracks not yet played: ' + str(xx))
        print('     FEED tracks usage progress: ' + str(prog_tot))

        ## Calc percentage of FEED used to date. (format to 2 decimal places).
        pc = (int(prog_tot) * 100) / int(feed_tot)
        print('     Percentage of FEED usage:   %.2f' % pc + '%')
        ## End of FEED PROGRESS DATA.


        params={'limit':queue_max}
        print('     Move ' + str(queue_max) + ' tracks from FEED to MIXER.')
        print('')
        query = 'https://api.spotify.com/v1/playlists/{}/tracks'.format(self.feed_id)
        response = requests.request('get', url=query, headers={'Content-type': 'application/json','Authorization':'Bearer {}'.format(self.spotify_token)},params=params)
        response_json = response.json()

        for i in response_json['items']:
            self.tracks += i['track']['uri'] + ','
        self.tracks = self.tracks[:-1]
        self.add_tracks_to_mixer()
   
    def add_tracks_to_mixer(self):
        query = 'https://api.spotify.com/v1/playlists/{}/tracks?uris={}'.format(self.mixer_id, self.tracks)
        response = requests.request('put', url=query, headers={'Content-type': 'application/json','Authorization':'Bearer {}'.format(self.spotify_token)})
        self.remove_tracks_from_feed()

    def remove_tracks_from_feed(self):
        tracks_to_delete = []
        tmp_tracks = self.tracks.split(',')
        for i in tmp_tracks:
            tracks_to_delete.append({'uri':i})

        query = 'https://api.spotify.com/v1/playlists/{}/tracks'.format(self.feed_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}))

    def call_refresh(self):
        refreshCaller = Refresh()
        self.spotify_token = refreshCaller.refresh()
        self.get_tracks_from_feed()

a = MoveTracks()
a.call_refresh()
