# Recommender3.py

from operator import itemgetter

affinity = "affinity.dat"
moviesInfo = "movies.csv"
bestAffinity = "bestaffinity.dat"

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 getSamples(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 getMovieIds():
    movieIds = []
    for i in range(1,len(movies)):
        movieIds.append(int(movies[i][0]))
    return movieIds

def getMovieTitle(movieId):
    for movie in movies:
        try:
            if int(movie[0]) == movieId:
                return movie[1]
        except:
            continue
    return ""       

fOut = open(bestAffinity, "w")
myId = 1
movies = loadData(moviesInfo)
movieIds = getMovieIds()[0:100]
print "Starting..."
for premise in movieIds:
    samples = getSamples(affinity, premise)
    samples = sorted(samples, key = itemgetter(2)) # sort by number
    last_sample = samples[-1]
    highest = last_sample[1]
    fOut.write(getMovieTitle(premise) + " --> " + getMovieTitle(highest) + "\n")
fOut.close()
print "all done"
