import json, requests, time
from datetime import datetime
from secrets import spotify_user_id, master_id
from refresh import Refresh

class BackupMaster:
    def __init__(self): 
        self.user_id = spotify_user_id
        self.master_id = master_id
        self.spotify_token = ''
        self.tracks = ''
        self.new_playlist_id = ''

    def start_backup(self):
        print('• Make BACKUP copy of the MASTER playlist:')
        self.create_playlist()

    def create_playlist(self):
        print('• Create new BACKUP Playlist:')
        now = datetime.now()
        date_time_day = now.strftime('%d')
        date_time_long = now.strftime('%d-%m-%y @ %H:%M:%S')
        query = 'https://api.spotify.com/v1/users/{}/playlists'.format(spotify_user_id)
        request_body = json.dumps({'name': 'Backup: ' + date_time_day , 'description': 'BACKUP of MASTER Playlist: ' + date_time_long , 'public': False})
        response = requests.post(query, data=request_body, headers={'Content-Type':'application/json','Authorization':'Bearer {}'.format(self.spotify_token)})
        response_json = response.json()
        new_playlist_id = response_json['id']

        print('• Get total of tracks in MASTER playlist:')
        query = "https://api.spotify.com/v1/playlists/{}".format(self.master_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) + '.')
        print('')

        print('• Copy MASTER tracks to BACKUP:')
        for t in range(0, self.queue_total, 100):
            print('• Copying tracks: [' + str(t) + ']', end='\r')
            self.tracks = ''
            self.offset = t
            #time.sleep(.5)

            query = 'https://api.spotify.com/v1/playlists/{}/tracks'.format(self.master_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.tracks += i['track']['uri'] + ','
            self.tracks = self.tracks[:-1]

            query = 'https://api.spotify.com/v1/playlists/{}/tracks?uris={}'.format(new_playlist_id, self.tracks)
            response = requests.request('post', url=query, headers={'Content-type': 'application/json','Authorization':'Bearer {}'.format(self.spotify_token)})
        print('• All done..')

    def call_refresh(self):
        refreshCaller = Refresh()
        self.spotify_token = refreshCaller.refresh()
        self.start_backup()

a = BackupMaster()
a.call_refresh()