# Check if all the files needed by kjv-api (to write to) are also owned by the user running it.
# if this is not the same, writing to data/seq.db (and other undesirable behavior) is inevitable
# and will save a lot of headache in the future.

#Additionally, proper CHMOD value is 664 for the database
from os import stat, getuid

def check_sanity():
    check_database_permissions()


def check_database_permissions():
    dependancies = ['data/seq.db', "data/shortcodes.db"]
    current_uid = getuid()
    for dependancy in dependancies:
        if stat(dependancy).st_uid != current_uid:
            raise PermissionError(dependancy)

def check_queries(url=None):
    try:
        import requests
    except ImportError:
        raise ImportError("You must install the requests python3 module")
    endpoints: list = 'show find search seq status votd random define'.split(" ")
    viewarguments: list = 'rich plain json'.split(" ")
    with open("tools/search_keywords.txt") as f:
        keywords = f.read().splitlines()

    log = []

    baseurl = "http://localhost:1611"
    if url:
        baseurl = url

    for endpoint in endpoints:
        for viewargument in viewarguments:
            for keyword in keywords:
                testurl = f"{baseurl}/{endpoint}?view={viewargument}&kw={keyword}"
                r = requests.get(testurl)
                log.append([testurl, r.status_code])

    with open("tools/sanity_results.txt", 'r+') as logfile:
        for logged in log:
            if logged[1] != 200:
                logfile.write(f"{logged[1]} - {logged[0]}\n")
                print(f"{logged[1]} - {logged[0]}\n")

if __name__ == "__main__":
    import argparse
    parser = argparse.ArgumentParser("Endpoint testing for your kjv api.")
    parser.add_argument('url', type=str, nargs='?', help="like http://localhost:1611")
    args = parser.parse_args()
    if not args.url:
        print("Trying default http://localhost:1611")
        url = "http://localhost:1611"
    check_queries(url=args.url)