(function() {
    'use strict';
    console.log('XOS Helpers Module')
    angular.module('bugSnag', []).factory('$exceptionHandler', function () {
      return function (exception, cause) {
        if( window.Bugsnag ){
          Bugsnag.notifyException(exception, {diagnostics:{cause: cause}});
        }
        else{
          console.error(exception, cause, exception.stack);
        }
      };
    });

    angular
        .module('xos.helpers',[
          'ngCookies',
          'xos.xos',
          'xos.hpcapi',
          'xos.xoslib',
          'bugSnag',
        ])
        .config(config);

    function config($httpProvider, $interpolateProvider, $resourceProvider) {
      console.log('xos.helpers config')
      $httpProvider.interceptors.push('SetCSRFToken');

      $interpolateProvider.startSymbol('{$');
      $interpolateProvider.endSymbol('$}');

      // NOTE http://www.masnun.com/2013/09/18/django-rest-framework-angularjs-resource-trailing-slash-problem.html
      $resourceProvider.defaults.stripTrailingSlashes = false;
    }
})();