# Recommender2.py

from operator import itemgetter

affinity = "affinity.dat"
moviesInfo = "movies.csv"

def loadData(fileName):
    try:    
        fData = open(fileName, 'r')
    except:
        return []
    out = []
    for line in fData:
        line = line[:-1]  # remove \n
        if len(line) == 0:  # empty line
            continue
        li = [i for i in line.split(",")]
        out.append(li)
    fData.close()
    return out

def getCollection(fileName, premise):
    try:    
        fData = open(fileName, 'r')
    except:
        return []
    out = []
    for line in fData:
        li = [int(i) for i in line.split(";")]
        if premise == li[0]:
            out.append(li)
        elif premise == li[1]:
            out.append([li[1], li[0], li[2]])   # exchange first two elements 
    fData.close()
    return out

def getMovieTitle(movieId):
    for movie in movies:
        try:
            if int(movie[0]) == movieId:
                return movie[1]
        except:
            continue
    return ""       

def getAll():
    sum = 0
    for item in collection:
        sum += item[2]
    return sum


movies = loadData(moviesInfo)

premise = 3  # selected movieId
collection = getCollection(affinity, premise)
collection = sorted(collection, key = itemgetter(2)) # sort by number
collection = collection[::-1] # reverse list
print "Ordered affinities with movie --->", getMovieTitle(premise)
print "---------------------------------------------------"
for item in collection:
    if item[2] < 20:
        break
    print  item[2], "persons --->", getMovieTitle(item[1])


