import sys, os, json, requests, time, sqlite3
sys.path.insert(1, 'j:\\Spotty\secrets_and_database')
from sqlite3 import Error
from refresh import Refresh

refreshCaller = Refresh()
job_done = False

class release2:
    def __init__(self):
        self.spotify_token = ""
        self.here_i_am = os.path.dirname(os.path.abspath(__file__))
        self.dbpath = 'j:\\Spotty\secrets_and_database'
        self.database_name = "Enormous Feed"
        #self.database_name = "Endless Feed"
        self.track_list = []
        self.artist_track_list = []
        self.full_track_name = []
        self.full_artist_name = []
        self.full_album_name = []
        self.full_album_artist_name =[]
        self.track_length_list = []

    def call_refresh(self):         # NOTE  Euan's Mk.2
        global refreshCaller
        while True:
            self.spotify_token = refreshCaller.refresh()
            if self.spotify_token == -1:
                print(
                    "==============================\n[!] Error refreshing token, retrying in 30 Seconds\n==============================")
                time.sleep(30)
            else:
                break

    def do_the_business(self):
        self.database = self.dbpath + r"\\" + self.database_name + ".db"
        self.add_uri_records_to_list()
        print()
        self.get_track_data()
        #self.update_track_name()

    def create_connection(self, db_file):  # NOTE Create a database connection
        conn = None
        try:
            conn = sqlite3.connect(db_file)
            return conn
        except Error as e1:
            print("Create_Connection")
            print(e1)
        return conn
            
    def add_uri_records_to_list(self):
        self.item = 0
        conn = self.create_connection(self.database)
        cur = conn.cursor()
        try:
            with conn:
                cur.execute("SELECT * FROM Track_List WHERE TRACK_LENGTH IS NULL")
                rows = cur.fetchall()
                self.trw = len(rows)
                rw = 1
                for row in rows:
                    print("Adding Tracks To List! Working on Item " + str(rw) + " of " + str(self.trw), end='\r')
                    self.track_list.append(row[0])
                    rw+=1
                    continue
        except Error as e2:
            print("add_uri_records_to_list")
            print(e2)
        return
        
    def get_track_data(self):
        self.item2 = 0
        while self.item2 < self.trw:
            if str(self.item2)[-2:] == "00":
                self.call_refresh()
            uriid = self.track_list[self.item2][14:]
            query = "https://api.spotify.com/v1/tracks/{}".format(uriid)
            response = requests.request("get", url=query, headers={"Content-type": "application/json", "Authorization": "Bearer {}".format(self.spotify_token)})
            json_data = json.loads(response.text)
            print("                                                                                                                 ", end='\r')
            print("Record " + str(self.item2) + " of " + str(self.trw) + " - " + json_data["name"], end='\r')
            #self.track_name = json_data["name"]
            #self.artist_name = json_data["artists"][0]["name"]
            #self.album_name = json_data["album"]["name"]
            #self.album_artist_name = json_data["album"]["artists"][0]["name"]
            self.track_length = json_data["duration_ms"]
            total_sec = self.track_length / 1000
            min = int(total_sec // 60)
            sec = int(total_sec % 60)
            self.track_length = f"{min}m {sec}s"
            self.track_length_list.append(self.track_length)
            #if "'" in self.track_name:
            #    self.track_name = self.track_name.replace("'", "''")
            #self.hyphen = str(self.track_name).find(" - ")
            #if self.hyphen != -1:
            #    self.track_name = self.track_name[:self.hyphen]
            #self.full_track_name.append(self.track_name)
            #if "'" in self.artist_name:
            #    self.artist_name = self.artist_name.replace("'", "''")
            #self.full_artist_name.append(self.artist_name)
            #if "'" in self.album_name:
            #    self.album_name = self.album_name.replace("'", "''")
            #self.hyphen = str(self.album_name).find(" - ")
            #if self.hyphen != -1:
            #    self.album_name = self.album_name[:self.hyphen]
            #self.full_album_name.append(self.album_name)  
            #if "'" in self.album_artist_name:
            #    self.album_artist_name = self.album_artist_name.replace("'", "''")
            #self.full_album_artist_name.append(self.album_artist_name)
            self.update_track_name()        
            self.item2 += 1
        print()

    def update_track_name(self):
        conn = self.create_connection(self.database)
        with conn:
            cur = conn.cursor()
            #self.namelist_len = len(self.full_track_name)
            #x = 0
            #while x < self.namelist_len:
            #print("Updating Data. Working on Item " + str(x) + " of " + str(self.namelist_len), end='\r')
            cur.execute("UPDATE Track_list SET TRACK_LENGTH = '" + self.track_length + "' WHERE URI = '" + self.track_list[self.item2] + "'")
            #x+=1
            #print()
            #print("Committing")
            conn.commit()

a = release2()
a.call_refresh()
a.do_the_business()