import json, requests
from secrets import spotify_user_id, queue_id, oldies_id, temp_id
from refresh import Refresh

class SamplePlaylist:
    def __init__(self): 
        self.user_id = spotify_user_id
        self.source_id = oldies_id   # RVRB OLDIES playlist as SOURCE.
        self.target_id = queue_id    # RVRB QUEUE playlist as TARGET.
        self.temp_id = temp_id       # RVRB TEMP playlist as TEMP.
        self.spotify_token = ''
        self.tracks = ''

    def start(self):
        ######################################################################################################################################
        print('1. Copy STACK tracks to TEMP')
        query = 'https://api.spotify.com/v1/playlists/{}/tracks?uris={}'.format(self.temp_id, self.tracks)
        response = requests.request('put', url=query, headers={'Content-type': 'application/json','Authorization':'Bearer {}'.format(self.spotify_token)})
       
        print('Get total of tracks in STACK playlist:')
        query = "https://api.spotify.com/v1/playlists/{}".format(self.target_id)
        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"])
        print('Total tracks = ' + str(self.queue_total) + '.')

        for v in range(0, self.queue_total, 100):
            print('• Copying tracks...')
            self.oldtracks = ''
            self.offset = v

            query = 'https://api.spotify.com/v1/playlists/{}/tracks'.format(self.target_id)
            response = requests.request('get', url=query, headers={'Content-type':'application/json','Authorization':'Bearer {}'.format(self.spotify_token)},params={'limit': 100, 'offset': self.offset})
            response_json = response.json()
            for i in response_json['items']:
                self.oldtracks += i['track']['uri'] + ','
            self.oldtracks = self.oldtracks[:-1]

            query = 'https://api.spotify.com/v1/playlists/{}/tracks?uris={}'.format(self.temp_id, self.oldtracks)
            response = requests.request('post', url=query, headers={'Content-type': 'application/json','Authorization':'Bearer {}'.format(self.spotify_token)})
        #####################################################################################################################################

        print('Copy 50 OLDIES [by offset] tracks to QUEUE.')

        # Clear current tracks from TARGET playlist.
        query = 'https://api.spotify.com/v1/playlists/{}/tracks?uris={}'.format(self.target_id, self.tracks)
        response = requests.request('put', url=query, headers={'Content-type': 'application/json','Authorization':'Bearer {}'.format(self.spotify_token)})

        ## Get total of tracks in SOURCE playlist.
        query = "https://api.spotify.com/v1/playlists/{}".format(self.source_id)
        response = requests.request("get", url=query, headers={"Content-type": "application/json","Authorization": "Bearer {}".format(self.spotify_token)})
        json_data = json.loads(response.text)
        self.source_total = (json_data["tracks"]["total"])
        print('Total tracks: ' + str(self.source_total) + '.')

        ## Read old Offset value from file.
        with open('mod1_off.txt') as file:
            self.offset = int(file.read())
        print('Old Offset Read  = ' + str(self.offset))

        print('Copying tracks.')
        self.tracks = ''

        query = 'https://api.spotify.com/v1/playlists/{}/tracks'.format(self.source_id)
        response = requests.request('get', url=query, headers={'Content-type':'application/json','Authorization':'Bearer {}'.format(self.spotify_token)},params={'limit': 50, 'offset': self.offset})
        response_json = response.json()
        for i in response_json['items']:
            self.tracks += i['track']['uri'] + ','
        self.tracks = self.tracks[:-1]

        query = 'https://api.spotify.com/v1/playlists/{}/tracks?uris={}'.format(self.target_id, self.tracks)
        response = requests.request('post', url=query, headers={'Content-type': 'application/json','Authorization':'Bearer {}'.format(self.spotify_token)})
        print('Sample complete.')

        ## Write new Offset value to file - (if not over playlist track total)
        if self.offset < self.source_total:
            self.offset = self.offset + 50
            print('New Offset Write = ' + str(self.offset))
            f = open('mod1_off.txt', 'w')
            f.write(str(self.offset))
            f.close()

        xx = self.source_total - self.offset
        xx = int((xx / 50))

        if xx < 1:
            print('Offsets Remain  = ' + str(xx))
            self.offset = 0
            print('Offset is Reset = ' + str(self.offset))
            f = open('mod1_off.txt', 'w')
            f.write(str(self.offset))
            f.close()

    def call_refresh(self):
        refreshCaller = Refresh()
        self.spotify_token = refreshCaller.refresh()
        self.start()

a = SamplePlaylist()
a.call_refresh()
