# Function to take a sample of articles from CrossRef and display information about the percentage of "Pure Latin" in the titles

from habanero import Crossref
import get_unicode_blocks

def get_sample(sampleSize):
    # Set email address so that I can be put into "polite" pool
    cr = Crossref(mailto = "jc550@students.waikato.ac.nz")
    # If requested sample size is above 100, then we can't do that and must reduce it
    if (sampleSize > 100): sampleSize = 100
    # Generate and send query to CrossRef (Limited Query = 100)
    query = cr.works(sample=sampleSize)
    return query

def process_sample(sampleQuery):
    sampleQueryItems = sampleQuery["message"]["items"]
    sampleDataToReturn = []
    #for each item in the sample
    #print(len(sampleQueryItems))
    for itemNum in range(len(sampleQueryItems)):
        #print(str(itemNum) + " ", end = "")
        item = sampleQueryItems[itemNum]
        if "title" not in item.keys():
            pass
            #sampleDataToReturn.append(100)
        else:
            title = item["title"][0]
            #print(title)
            numLatinChars = 0
            for char in enumerate(title):
                #encodedChar = char[1].encode('unicode_escape')
                encodedChar = int(hex(ord(char[1])), 16)
                if encodedChar <= 255:
                    numLatinChars = numLatinChars + 1
            lengthTitle = len(title)
            if numLatinChars == 0: sampleDataToReturn.append(0)
            else: sampleDataToReturn.append(numLatinChars/lengthTitle * 100)
            #print(str(numLatinChars/lengthTitle * 100))


    #print(sampleDataToReturn)
    return sampleDataToReturn

def analyse_processed_sample(processedSamples):
    averagePercentLatin = 0
    numberPureLatin = 0
    totalNumber = 0

    for processedSample in processedSamples:
        for articleData in processedSample:
            totalNumber = totalNumber + 1
            if articleData == 100: numberPureLatin = numberPureLatin + 1
            averagePercentLatin = averagePercentLatin + articleData

    averagePercentLatin = averagePercentLatin / totalNumber

    print("Total Number of Articles Analysed: " + str(totalNumber))
    print("Average Percent Latin: " + str(averagePercentLatin))
    print("Number Pure Latin: " + str(numberPureLatin))

print("How many samples would you like to do? ", end="")
numSamples = int(input())
print("How big should each sample be? (MAX 100) ", end="")
sampleSize = int(input())

# Data on the percentage of each title that is comprised of Latin
sampleLatinData = []

# obtain data from each sample
for sample in range(numSamples):
    queryResult = get_sample(sampleSize)
    sampleLatinData.append(process_sample(queryResult))

analyse_processed_sample(sampleLatinData)

