var handleError = function(error) {
  console.log(error);
}

var handleResult = function(result) {
	if (result.code == '/api/status/error') return handleError(result);
	
	var view = {
	  movies: [],
	  actors: [],
	  directors: [],
	  count: result.count.result[0],
	  search_terms: $('#search-field').val()
	};
	
	$(result.movies.result).each(function(index, node) {
	  var movie = {
	    name: node.name,
	    id: node.id
	  }
	  
	  if (node.initial_release_date)
      movie.year = node.initial_release_date.substr(0, 4);
	  
	  if ('/common/topic/image' in node)
	    if (0 in node['/common/topic/image'])
	      movie.image = getImageURL(node['/common/topic/image'][0]);
	  
	  view.movies.push(movie);
	});
	
	$(result.people.result).each(function(index, node) {
	  var person = {
	    name: node.name,
	    id: node.id
	  }
	  
	  if ('/common/topic/image' in node)
	    if (0 in node['/common/topic/image'])
	      person.image = getImageURL(node['/common/topic/image'][0]);
	  
	  if (node['type'][0] == '/film/actor')
	    view.actors.push(person);
	  if (node['type'][0] == '/film/director')
	    view.directors.push(person);
	});
	
	renderAutoComplete(view);
}

var getImageURL = function(image) {
	return 'http://api.freebase.com/api/trans/raw/guid/' + image.guid.replace('#', '');
}

var renderAutoComplete = function(view) {  
  html = autocompleteTemplate(view);  
  $('#autocomplete').show().html(html);
}

var searchMovie = function() {	
  $('#autocomplete').show().html('<div class="alert-message info">searching...</div>');
	
	var search_terms = $('#search-field').val();
	
	var film_query = express.MQL.film(search_terms, 5);
	var people_query = express.MQL.people(search_terms, 8);
	var count_query = express.MQL.count(search_terms);
	
	var query_envelope = {
	  'movies' : {'query': [film_query], 'extended': 1},
	  'people': {'query': [people_query], 'extended': 1},
	  'count': {'query': [count_query]}
	};
	
	var service_url = 'http://api.freebase.com/api/service/mqlread';
	var url = service_url  + '?queries=' + encodeURIComponent(JSON.stringify(query_envelope));
  $.ajax({ url: url, dataType: 'jsonp', success: handleResult});
}

$(document).ready(function() {
  
  var timeOut,
    ejs = require('ejs'),
    tmpl = $('#autocomplete_template').html();
    autocompleteTemplate = ejs.compile(tmpl);
  
  $('#search-field').keyup(function() {
    clearTimeout(timeOut);
    timeOut = setTimeout(searchMovie, 200);
  });
  
});
