# Program to compare OpenAlex and CrossRef Titles

# Use sanitise functions:
#   - clear_tags(): get rid of CrossRef XML tags
#   - add_subtitles(): add subtitles to the title
from sanitise import *

# Unicode block functions
from get_unicode_blocks import *

# OpenAlex API wrapper
from diophila import OpenAlex

# CrossRef API wrapper
from habanero import Crossref

#
import sys
openAlexClient = OpenAlex("jc550@students.waikato.ac.nz")
crossRefClient = Crossref(mailto = "jc550@students.waikato.ac.nz")

def getDOIOpenAlex(doi):
    try:  
        openAlexQuery = openAlexClient.get_single_work("https://www.doi.org/" + doi, "doi")
        return openAlexQuery
    except:
        return None
    
def getDOICrossref(doi):
    try:
        crossRefQuery = crossRefClient.works(ids=doi)
        return crossRefQuery
    except:
        return None
    
def getTitleFromOpenAlexObject(openAlexObject):
    try:
        return openAlexObject["title"]
    except:
        return None

def getTitleFromCrossrefObject(crossRefObject):
    try:
        return crossRefObject["message"]["title"][0]
    except:
        return None

# 10.1145/1998076.1998084 - user driven context-aware
# approach to erroneous metadata: Equivalent
# 10.21608/eji.2023.280845 - arabic smart home: Not Equivalent
#doiToCheck = input("What DOI would you like to check?")

def compareOnce(doiToCheck):
    crossRefTitle = getTitleFromCrossrefObject(getDOICrossref(doiToCheck))
    openAlexTitle = getTitleFromOpenAlexObject(getDOIOpenAlex(doiToCheck))

    if (openAlexTitle == crossRefTitle):
        print("Equivalent Titles: " + openAlexTitle)
    else:
        print("Not equivalent...")
        print("OpenAlex Title: " + openAlexTitle)
        print("CrossRef Title: " + crossRefTitle)

    print("--- OpenAlex Title Information ---")
    for char in openAlexTitle:
        print(str(hex(ord(char))) + " " + char + " " + get_block_for_codepoint(ord(char)))

    print("--- CrossRef Title Information ---")
    for char in crossRefTitle:
        print(str(hex(ord(char))) + " " + char + " " + get_block_for_codepoint(ord(char)))

def compareOnceIntoDictionary(doiToCheck):
    crossRefTitle = getTitleFromCrossrefObject(getDOICrossref(doiToCheck))
    openAlexTitle = getTitleFromOpenAlexObject(getDOIOpenAlex(doiToCheck))

    equivalent = openAlexTitle == crossRefTitle

    if crossRefTitle == None: crossRefTitle = ""
    if openAlexTitle == None: openAlexTitle = ""

    return {"crTitle": crossRefTitle, "oaTitle" : openAlexTitle, "doi" : doiToCheck ,"equivalence" : equivalent}

def main():
    f = open(sys.argv[1], "r", encoding="utf-8")
    doiFromFile = f.readline()
    compareOnce(doiFromFile)

