def search_database(user_id):
	print
        user_answer = raw_input("Do you want to search by keyword or ID?")
        if user_answer == "ID" or user_answer == "id":
                search_id = raw_input("Please enter the movie id. ")
                is_movie_in_database = int(IIDH.database_query("SELECT COUNT(*) FROM movies WHERE id={0}".format(search_id))[0][0])
                if is_movie_in_database != 0:
                        query_return = IIDH.database_query("SELECT * FROM movies where id={0}".format(search_id))[0]
			print query_return[0], query_return[1]
		else: print "Movie was not found. Please try again."
        elif user_answer == "keyword":
                search_keyword = raw_input("Please enter a keyword or phrase to search. ")
                is_movie_in_database = int(IIDH.database_query("SELECT count(*) FROM movies WHERE title like '%{0}%'".format(search_keyword))[0][0])
		if is_movie_in_database != 0:
			print "The following was found: "
                        query_return = IIDH.database_query("SELECT * FROM movies WHERE title like '%{0}%'".format(search_keyword))
                        for item in query_return:
                                print item[0], item[1]
                else:
			print "Movie was not found. Please try again."
			search_database(user_id)

	user_answer = raw_input("Do you want to search again? ")
	if user_answer == "yes":
		search_database(user_id)
	else: main_menu(user_id)
def rate_specific_movie(user_id):
	print
	movie_id_to_rate = int(raw_input("Please enter the movie ID# for the movie you wish to rate. "))
	already_rated = int(IIDH.database_query("SELECT count(rating) FROM ratings WHERE user = {0} AND movie = {1}".format(user_id, movie_id_to_rate))[0][0])

	if already_rated > 0:
		user_answer = raw_input("You have already rated this movie. Do you wish to edit your rating?")
		if user_answer == "yes":
			edit_existing_movie(user_id)
		else:
			main_menu(user_id)

	movie_title_to_rate = IIDH.database_query("SELECT title FROM movies WHERE id = {0}".format(int(movie_id_to_rate)))[0][0]

	print("The movie you chose is {0}".format(movie_title_to_rate))
	user_answer = raw_input("Is this the movie you want to rate?")
	if user_answer == "no":
		rate_specific_movie(user_id)
	elif user_answer == "yes":
		user_rating = raw_input("Please rate {0} on a scale from 1 to 5.".format(movie_title_to_rate))
		IIDH.database_write("INSERT INTO ratings (user, movie, rating, timestamp) VALUES ({0}, {1}, {2}, {3})".format(user_id, movie_id_to_rate, int(user_rating), int(time.time())))
	print "Thank you for your rating."
	user_answer = raw_input("Would you like to rate another movie?")
	if user_answer == "yes":
		rate_specific_movie(user_id)
	else:
		main_menu(user_id)
def list_rated_movies(user_id):
	print
	existing_ratings = IIDH.database_query("SELECT movie, rating FROM ratings WHERE user = {0}".format(user_id))
	print("Your existing ratings are: ")
	for rating in existing_ratings:
		title = IIDH.database_query("SELECT title FROM movies where id = {0}".format(rating[0]))[0][0]
		print int(rating[0]), title, rating[1], "/5"
	user_choice = raw_input("Would you like to edit an existing rating? ")
	if user_choice == "yes":
		edit_existing_movie(user_id)
	else:
		main_menu(user_id)
def edit_existing_movie(user_id):
	print
	movie_id_to_edit = int(raw_input("What is the ID# of the movie you wish to edit?"))
	movie_title_to_edit = IIDH.database_query("SELECT title FROM movies WHERE id = {0}".format(movie_id_to_edit))[0][0]
	current_rating = int(IIDH.database_query("SELECT rating FROM ratings WHERE user = {0} AND movie = {1}".format(user_id, movie_id_to_edit))[0][0])
	print("Your current rating for {0} is {1}/5".format(movie_title_to_edit, current_rating))
	answer = raw_input("Do you want to change this?")
	if answer == "yes":
		new_rating = raw_input("What would you like to rate {0} from 1 to 5.".format(movie_title_to_edit))
		IIDH.database_write("UPDATE ratings SET rating = {0} where user = {1} AND movie = {2}".format(new_rating, user_id, movie_id_to_edit))
		main_menu(user_id)
	else:
		main_menu(user_id)
def returning_user():
        user_id = int(raw_input("What is your user ID? "))
        user_exists = int(IIDH.database_query("SELECT count(id) FROM users where id={0}".format(int(user_id)))[0][0])
        if user_exists != 0:
                main_menu(user_id)
        else:
                print("That ID was not found. Please try again.")
                returning_user()
def get_top_ten(user_id):
	print "Calculating Top Ten...\n"
	already_rated = set(sum(IIDH.database_query("SELECT movie FROM ratings WHERE user = {0}".format(user_id)), ()))
	all_movies = set(sum(IIDH.database_query("SELECT id FROM movies"), ()))
	difference = all_movies - already_rated
	difference_list = list(difference)
	ratings = []
	for item in difference_list:
		prediction = IIDH.predict_rating(item, user_id)
		ratings.append([item, prediction])
	ratings.sort(key=lambda x: x[1], reverse=True)
	print "Your Top Ten unseen movies are:"
	for i in range(10):
		movie_title = IIDH.database_query("SELECT title FROM movies WHERE id = {0}".format(ratings[i][0]))
		print "{0}. {1} - {2}".format(i+1, movie_title[0][0], ratings[i][1])
	raw_input("\nPress ENTER to return to Main Menu")
	main_menu(user_id)
def new_user():
	user_id = int(IIDH.database_query("SELECT max(id) FROM users")[0][0]) + 1
	print("Your user ID is {0}. Please write it down.".format(user_id))
	print("Please answer the following demographic questions. ")
	user_age = raw_input("What is your age? ")
	user_sex = raw_input("What is your gender M/F? ")
	user_prof = raw_input("What is your profession? ")
	user_zip = raw_input("What is your zipcode? ")
	IIDH.database_write("INSERT INTO users (id, age, sex, profession, zipcode) VALUES ({0}, {1}, '{2}', '{3}', {4})".format(user_id, int(user_age), user_sex, user_prof, int(user_zip)))
	answer = raw_input("Before making recommendations, we'll need you to rate some movies. \nPlease rate at least 20 of the following movies to increase accuracy.")
	rate_random_movies(user_id)
def rate_random_movies(user_id):
	print("Please rate the following movies. \nType 'done' to end this rating session. ")
	movie_count = IIDH.get_movie_count()
	already_rated = set(sum(IIDH.database_query("SELECT movie FROM ratings WHERE user = {0}".format(user_id)), ()))
	all_movies = set(sum(IIDH.database_query("SELECT id FROM movies"), ()))
	random_movie_list = all_movies - already_rated
	shuffled_movie_list = list(random_movie_list)
	random.shuffle(shuffled_movie_list)
	print(random_movie_list)
	print(shuffled_movie_list)
	for movie_id in shuffled_movie_list:
		movie_title = IIDH.database_query("SELECT title FROM movies WHERE id={0}".format(movie_id))[0][0]
		user_answer = raw_input("Have you seen {0} {1}? ".format(movie_id, movie_title))
		if user_answer == "no":
			pass
		elif user_answer == "done":
			main_menu(user_id)
		else:
			user_rating = raw_input("Please rate {0} from 1 to 5. ".format(movie_title))
			IIDH.database_write("INSERT INTO ratings (user, movie, rating, timestamp) VALUES ({0}, {1}, {2}, {3})".format(user_id, movie_id, int(user_rating), int(time.time())))
	main_menu(user_id)