from alive_progress import alive_bar
import sys
import discogs_client
from discogs_client.exceptions import HTTPError
import datetime
import re
import json
import os, requests, time, sqlite3
from sqlite3 import Error
sys.path.insert(1, 'j:\\Spotty\secrets_and_database')

class date_check:
    def __init__(self):
        self.consumer_key = 'JJCOegYnRLCLRejtcZbo'
        self.consumer_secret = 'UFlGrCViqSkoBNfRTGZyUfmpTGNbFbMM'
        self.user_agent = 'discogs_date_checker1.0'
        self.d = ""
        #self.database = r"j:\Spotty\secrets_and_database\\Enormous Feed.db"
        self.database = r"j:\Spotty\secrets_and_database\\Endless Feed2.db"

    def do_the_stuff(self):
        self.authorise_discogs()
        self.check_genre()

    def create_connection(self, db_file):  # NOTE Connect to the database
        conn = None
        conn = sqlite3.connect(db_file)
        return conn

    def authorise_discogs(self):
        # instantiate our discogs_client object.
        self.d = discogs_client.Client(self.user_agent)
        # prepare the client with our API consumer data.
        self.d.set_consumer_key(self.consumer_key, self.consumer_secret)
        self.token, self.secret, self.url = self.d.get_authorize_url()
        print(' == Request Token == ')
        print(f'    * oauth_token        = {self.token}')
        print(f'    * oauth_token_secret = {self.secret}')
        print()
        print(f'Please browse to the following URL {self.url}')
        accepted = 'n'
        while accepted.lower() == 'n':
            print
            accepted = input(f'Have you authorized me at {self.url} [y/n] :')
        oauth_verifier = input('Verification code : ')
        try:
            access_token, access_secret = self.d.get_access_token(
                oauth_verifier)
        except HTTPError:
            print('Unable to authenticate.')
            sys.exit(1)
        # fetch the identity object for the current logged in user.
        self.user = self.d.identity()
        print
        print(' == User ==')
        print(f'    * username           = {self.user.username}')
        print(f'    * name               = {self.user.name}')
        print(' == Access Token ==')
        print(f'    * oauth_token        = {access_token}')
        print(f'    * oauth_token_secret = {access_secret}')
        print(' Authentication complete. Future requests will be signed with the above tokens.')

    def check_genre(self):
        conn = self.create_connection(self.database)
        cur = conn.cursor()
        cur.execute("SELECT COUNT (*) FROM Artist_Genre WHERE VERIFIED = 0")
        self.total_records = int(cur.fetchone()[0])
        nextrec = 0
        cur = conn.cursor()
        cur.execute("SELECT * FROM Artist_Genre WHERE VERIFIED = 0 ORDER BY ARTIST_NAME ASC")
        #cur.execute("SELECT * FROM Artist_Genre ORDER BY ARTIST_NAME ASC")
        rows = cur.fetchall()
        for row in rows:
            print("Working on Item " + str(nextrec) + " of " + str(self.total_records), end='\r')
            data_rec = 0
            art_done = False
            self.dtrack_name = row[4]
            self.dartist_name = row[2]
            results = self.d.search(str(self.dartist_name), type='release', artist=str(self.dartist_name))
            #results = self.d.search(str(self.dtrack_name), type='release', artist=str(self.dartist_name))
            nextrec +=1
            for release in results:
                if art_done:
                    break
                if not art_done:
                    while data_rec < 1:
                        self.release_id = (f'{release.id}')
                        self.disc_artist = f'{", ".join(artist.name for artist in release.artists)}'
                        self.disc_title = (f'{release.title}')
                        self.disc_genre = (f'{release.genres}')
                        self.disc_genre = self.disc_genre.replace("[", "")
                        self.disc_genre = self.disc_genre.replace("]", "")
                        self.disc_genre = self.disc_genre.replace("'", "")
                        self.disc_genre = str(self.disc_genre).strip()
                        self.disc_styles = (f'{release.styles}')
                        self.disc_styles = self.disc_styles.replace("[", "")
                        self.disc_styles = self.disc_styles.replace("]", "")
                        self.disc_styles = self.disc_styles.replace("'", "")
                        self.disc_styles = str(self.disc_styles).strip()
                        self.disc_year = int((f'{release.year}'))
                        data_rec+=1
                        art_done = True
                        self.add_discogs_genre()
    
    def add_discogs_genre(self):
        conn2 = self.create_connection(self.database)
        cur2 = conn2.cursor()
        try:
            self.dartist_name = self.dartist_name.replace("'", "''")
            cur2.execute("UPDATE Artist_Genre SET Discog_Genre = '" + self.disc_genre + "' WHERE SPOT_ARTIST_NAME = '" + self.dartist_name + "'")
            conn2.commit()
            cur2.execute("UPDATE Artist_Genre SET Discog_Style = '" + self.disc_styles + "' WHERE SPOT_ARTIST_NAME = '" + self.dartist_name + "'")
            conn2.commit()
            cur2.execute("UPDATE Artist_Genre SET VERIFIED = 1 WHERE SPOT_ARTIST_NAME = '" + self.dartist_name + "'")
            conn2.commit()
        except Error as e5:
            print("check_artist_genre_table")
            print(e5)
            return

a = date_check()
a.do_the_stuff()