var VEM = {
  api: {}
};

VEM.api.searchpieces = function(params, callback) {
  var url = VEM.engine.urlFor('search_pieces', {
    'lang': VEM.engine._options.lang
    });

  $.getJSON(url, params).done(function(response) {
    if(response.success) {
      callback(response.data.aaData);
    } else {
      console.log('an error occurred');
      console.log(response);
    }
  });
};

VEM.api.navigatetomedia = function(invoker_name, event_name, media_id, show_description, load_vtour, look_to_piece, vtour_fov, load_map, map_fov) {
  VEM.api._do_navigatetomedia(invoker_name, event_name, media_id, show_description, load_vtour, look_to_piece, vtour_fov, load_map, map_fov);
}

VEM.api._do_navigatetomedia = function(invoker_name, event_name, media_id, show_description, load_vtour, look_to_piece, vtour_fov, load_map, map_fov) {
  var mediaController = VEM.engine._viewports['media']._controller;
  VEM.engine.getMedia(media_id, function(response) {
    var media = response.data[0];
    var media_type = 'thumbnail';
    switch (media.media_type) {
      case 'KRPANO':
        media_type = 'krpano_view_media';
        break;
      case 'PHOTO':
        media_type = 'full_size_image';
        break;
      default:
        break;
    }

    mediaController.loadMedia(media_type, media.id);

    // Load description
    var descriptionController = VEM.engine._viewports['desc']._controller;
    descriptionController.loadDescription(media.piece_id);


    // Load VTour and Map
    load_vtour = load_vtour && s4ntc.tools.test.nNOU(media.Piece.RefKrpanoHotspot);
    load_vtour = load_vtour && s4ntc.tools.test.nNOU(media.Piece.RefKrpanoHotspot.ParentKrpanoView);
    load_vtour = load_vtour && s4ntc.tools.test.nNOU(media.Piece.RefKrpanoHotspot.ParentKrpanoView[0]);

    if(load_vtour) {

      var pano_id = media.Piece.RefKrpanoHotspot.ParentKrpanoView[0].id;
      var dest_hotspot_id = 0;
      if(look_to_piece) dest_hotspot_id = media.Piece.RefKrpanoHotspot.id;
      VEM.api.navigatetopano(invoker_name, event_name, pano_id, load_map, true, map_fov, dest_hotspot_id, vtour_fov);

    } else {

      load_map = load_map && s4ntc.tools.test.nNOU(media.Piece.RefMapHotspot);
      load_map = load_map && s4ntc.tools.test.nNOU(media.Piece.RefMapHotspot.ParentMap);
      load_map = load_map && s4ntc.tools.test.nNOU(media.Piece.RefMapHotspot.ParentMap[0]);

      if(load_map) {
        var map_id = media.Piece.RefMapHotspot.ParentMap[0].id;
        var dest_hotspot_id = 0;
        if(look_to_piece) dest_hotspot_id = media.Piece.RefMapHotspot.id;
        VEM.api.navigatetomap(invoker_name, event_name, map_id, dest_hotspot_id, map_fov);
      }

    }
  });
};

VEM.api.navigatetopano = function(invoker_name, event_name, pano_id, load_map, look_to_map_hotspot, map_fov, dest_hotspot_id, vtour_fov) {
  VEM.engine.getKrpanoView(pano_id, function(response) {
    $(window).trigger('pano_loaded', response.data);
  });

  VEM.api._do_navigatetopano(invoker_name, event_name, pano_id, load_map, look_to_map_hotspot, map_fov, dest_hotspot_id, vtour_fov);
}

VEM.api._do_navigatetopano = function(invoker_name, event_name, pano_id, load_map, look_to_map_hotspot, map_fov, dest_hotspot_id, vtour_fov) {
  var vtourController = VEM.engine._viewports['vtour']._controller;
  vtourController.loadPano(pano_id, 'vtour');


  if(parseInt(dest_hotspot_id) > 0) {
    vtourController.lookToHotspot(dest_hotspot_id, vtour_fov);
  }

  if(load_map) {
    // Get ref map id
    VEM.engine.getKrpanoViewReferenceMap(pano_id, function(response) {
      if(response.success) {
        var ref_map_id = response.data.ref_map_id;
        var ref_map_hotspot_id = response.data.ref_map_hotspot_id;
        VEM.api.navigatetomap(invoker_name, event_name, ref_map_id, look_to_map_hotspot ? ref_map_hotspot_id : null, map_fov);
      }
    });
  }
};

VEM.api.navigatetomap = function(invoker_name, event_name, map_id, look_to_hotspot_id, fov) {
  VEM.api._do_navigatetomap(invoker_name, event_name, map_id, look_to_hotspot_id, fov);
}

VEM.api._do_navigatetomap = function(invoker_name, event_name, map_id, look_to_hotspot_id, fov) {
  var mapController = VEM.engine._viewports['map']._controller;
  mapController.loadPano(map_id, 'map');
  if(parseInt(look_to_hotspot_id) > 0) {
    mapController.lookToHotspot(look_to_hotspot_id, fov);
  }
};
