define([
    'api.bridge',
    'interaction',
    'interaction.search'],
  function(ApiBridge, Interaction, InteractionSearch) {
    var api = {
      initialize: function (params, successCb) {
        Interaction.init();
        successCb('interaction');
      },

      screenPop: function (params, successCb) {
        Interaction.screenPop(params);
        successCb('ok');
      },

      showConfirmationDialog: function(params, successCb, failCb) {
        Interaction.showConfirmationDialog(params).then(successCb, failCb);
      },

      getTodayCallsCount: function (params, successCb, failCb) {
        Interaction.myCallsTodayCounter().then(successCb, failCb);
      },

      getTodayChatsCount: function (params, successCb, failCb) {
        Interaction.myChatsTodayCounter().then(successCb, failCb);
      },

      getTodayEmailsCount: function (params, successCb, failCb) {
        Interaction.myEmailsTodayCounter().then(successCb, failCb);
      },

      openMyCallsToday: function (params, successCb, failCb) {
        Interaction.openMyCallsToday().then(successCb, failCb);
      },

      openMyChatsToday: function (params, successCb, failCb) {
        Interaction.openMyChatsToday().then(successCb, failCb);
      },

      openMyEmailsToday: function (params, successCb, failCb) {
        Interaction.openMyEmailsToday().then(successCb, failCb);
      },

      bringAppToFront: function (params, successCb, failCb) {
        Interaction.bringAppToFront(params).then(successCb, failCb);
      },

      requestSettings: function (params, successCb) {
        Interaction.requestSettings().then(successCb);
      },

      doSearch: function (params, successCb, failCb) {
        InteractionSearch.search(params).then(successCb, failCb);
      },

      doSaveCallLog: function (params, successCb, failCb) {
        Interaction.saveLog(params).then(successCb, failCb);
      },

      doGetBaseSize: function (params, successCb, failCb) {
        Interaction.getBaseSize(params).then(successCb, failCb);
      },

      setAdapterSize: function (params, successCb, failCb) {
        Interaction.setAdapterSize(params).then(successCb, failCb);
      },

      enableClickToDial: function (params, successCb, failCb) {
        Interaction.enableClickToDial().then(successCb, failCb);
      },

      disableClickToDial: function (params, successCb, failCb) {
        Interaction.disableClickToDial().then(successCb, failCb);
      }
    };

    ApiBridge.registerApi(api);

    var eventTriggers = ApiBridge.registerEvents(['crmObjectVisited', 'crmClick2Dial']);

    ApiBridge.startListening();

    return eventTriggers;
  });
