import datetime
import requests
import sqlite_utils
import logging
import json
import time

sqlite_db = sqlite_utils.Database("loanapps.db")

# if (sqlite_db['koodous_apkdata'] is None):
#     sqlite_db['koodous_apkdata'].created({"id":str,})

def koodous_search(searchQuery):
    logging.debug('Entering koodous_search with searchQuery : ' + searchQuery)
    params = {'search':searchQuery}
    koodous_url = "https://api.koodous.com/apks"
    logging.info(koodous_url)
    search_response_apps = []
    while True:
        if not koodous_url.__contains__('cursor'):
            r = requests.get(url=koodous_url, params=params)
        else:
            r = requests.get(url=koodous_url)
            logging.info(r.url)
        response = r.json()
        if (response['next'] is None or ('results' not in response)):
            break
        for app in response['results']:
            logging.debug(app['app'] + '\t' + app['package_name'] + '\t' + app['sha256'])
            sqlite_db.table('koodous_apkdata', alter=True).upsert(app, hash_id="id")
            search_response_apps.append(app['package_name'])
        koodous_url = response['next']
    logging.debug('Exiting koodousQuery')    
    return list(set(search_response_apps))
        

def main():
    logging.info('==== Start of Run ====')
    with open(file='KoodousQueries.json', mode= 'r') as infile:
        queries = json.load(infile)
    for row in sqlite_db["koodous_searches"].rows_where("LastRun <> " + str(datetime.date.today())):
        queries = [query for query in queries if not (query['QueryName'] == row['QueryName'])] 
    logging.info("The filtered queries are : ")
    logging.info(queries)
    for query in queries:
        logging.debug('Running query - ')
        logging.debug(query)
        query['LastRun'] = datetime.date.today()
        sqlite_db.table('koodous_searches', alter=True).upsert(query, hash_id="id")
        search_result_apps = koodous_search(query['QueryText'])
        logging.info(str(len(search_result_apps)) + ' unique apps returned for Query name ' + query['QueryName'] + ' with Query Text ' + query['QueryText'])
        for app in search_result_apps:
            sqlite_db.table('koodous_search_result', alter=True).upsert({'QueryName': query['QueryName'], 'App' : app}, hash_id="id")
    logging.info('==== End of Run ====')

if __name__ == "__main__":
    logging.basicConfig(filename='KoodousSearch_' + time.strftime("%Y%m%d-%H%M%S") + '.log', format='%(asctime)s %(message)s', level=logging.INFO)
    main()
