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.trkdate_list = []
        #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.release_check()
        #self.check_release_date()

    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 release_check(self):
        self.title_wanted = "I'm Mandy Fly Me"
        self.artist_wanted = '10cc'
        results = self.d.search(self.title_wanted, artist=self.artist_wanted, type='release')
        #print(results.page(1))
        #print(results.page(2))
        #print(results.page(3))
        #print(results.page(4))
        #print(results.page(5))
        #print(results.page(6))
        #print(results.page(7))
        #print(results.page(8))
        #print(results.page(9))
        #print(results.page(10))
        #print(results.page(11))
        #print(results.page(12))
        num=1
        self.orig_year = 2024
        for release in results:
            #print("Title" + str(num))
            self.dtitle = (f'\tTitle\t: {release.title}')
            #print(self.dtitle)
            if self.title_wanted in self.dtitle:
                print("Title" + str(num))
                print(self.dtitle)
                print(self.title_wanted)
                print("Year")
                print((f'\tYear\t: {release.year}')[-4:])
                self.this_year = int((f'\tYear\t: {release.year}')[-4:])
                print(self.this_year)
                if self.this_year < self.orig_year:
                    self.orig_year = self.this_year
                print("Earliest Year is " + str(self.orig_year))
                print("***********************************************************************")
                num+=1
            #print("Master")
            #print(f'\tReleased\t {release.master}')
            #print("release-id")
            #print(f'\n\t== discogs-id {release.id} ==')
            #print("Artist")
            #print(f'\tArtist\t: {", ".join(artist.name for artist in release.artists)}')
            #print("Label")
            #print(f'\tLabels\t: {", ".join(label.name for label in release.labels)}')


    def check_release_date(self):
        conn = self.create_connection(self.database)
        cur = conn.cursor()
        cur.execute("SELECT COUNT (*) FROM Release_Date WHERE VERIFIED = 0")
        self.total_records = int(cur.fetchone()[0])
        nextrec = 0
        cur = conn.cursor()
        cur.execute("SELECT * FROM Release_Date 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')
            #print("110 NEW ARTIST " + str(row[0]))
            data_rec = 0
            art_done = False
            self.dtrack_name = row[2]
            print()
            print(self.dtrack_name)
            print()
            #self.dartist_name = row[4]
            self.dartist_name = row[3]
            #results = self.d.search(str(self.dartist_name), type='release', artist=str(self.dartist_name))
            results = self.d.search(str(self.dtrack_name), artist=str(self.dartist_name), type='release')
            #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:
                    #NEED TOGET EARLIEST DATE HERE
                    self.trk_name = (f'\tTitle\t: {release.title}')
                    print(self.trk_name)
                    print(self.dtrack_name)
                    self.trk_date = (f'\tYear\t: {release.year}')
                    if self.trk_name == self.dtrack_name:
                        self.trkdate_list.append(self.trk_date)
                        print("****************************************************** FOUND ONE ******************************************")
                        print()
                    continue


#########################################################################################################################




                    while data_rec < 1:
                    #print(f'\tTitle\t: {release.title}')
                    #print(f'\tYear\t: {release.year}')
                    #print(f'\tReleased\t {release.master}')
                        self.release_id = (f'{release.id}')
                    #print(self.release_id)
                        self.disc_artist = f'{", ".join(artist.name for artist in release.artists)}'
                        print()
                        print (self.disc_artist)
                        self.disc_title = (f'{release.title}')
                        print(self.disc_title)
                        print()
                        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()

                        #print(self.disc_genre)
                        #print(self.disc_styles)
                        
                        self.disc_year = int((f'{release.year}'))
                        #print(self.disc_year)
                        data_rec+=1
                    #print(data_rec)
#                if self.disc_year < self.temp_date:
#                    self.temp_date = self.disc_year
#            print(self.temp_date)
                        art_done = True
                        ###self.add_discogs_genre()
    
#results = d.search('Bye Bye Bye?', type='release')
#print(results)
#print()
#results = d.search('Can I borrow a feeling?', type='release,master')
#print(results)
#print()
#results = self.d.search('Bye Bye Bye?', artist='*NSYNC', type='release')
#print(results)
#print()
#results = d.search('Can I borrow a feeling?', genre='Hip Hop')
#print(results)
#print()
##search_results = discogsclient.search('Out In The Sun', type='release', artist='Patrick Moraz')
##print('\n== Search results for release_title=Out In The Sun ==')
#print(search_results)
##for release in search_results:
    ##print(f'\n\t== discogs-id {release.id} ==')
    ##print(f'\tArtist\t: {", ".join(artist.name for artist in release.artists)}')
    ##print(f'\tTitle\t: {release.title}')
    ##print(f'\tYear\t: {release.year}')
    ##print(f'\tReleased\t {release.master}')
    ##print(f'\tLabels\t: {", ".join(label.name for label in release.labels)}')
#print(results.page(1))

a = date_check()
a.do_the_stuff()
