import * as angular from 'angular';
import { quayConfig } from './quay.config';
import quayPages from './quay-pages.module';
import quayRun from './quay.run';
import { ViewArrayImpl } from './services/view-array/view-array.impl';
import NAME_PATTERNS from './constants/name-patterns.constant';
import { routeConfig } from './quay.routes';
import { INJECTED_CONFIG, INJECTED_FEATURES, INJECTED_ENDPOINTS } from './constants/injected-values.constant';


var quayDependencies: string[] = [
  quayPages,
  'ngRoute',
  'chieffancypants.loadingBar',
  'cfp.hotkeys',
  'angular-tour',
  'restangular',
  'angularMoment',
  'mgcrea.ngStrap',
  'ngCookies',
  'ngSanitize',
  'angular-md5',
  'pasvaz.bindonce',
  'ansiToHtml',
  'core-ui',
  'core-config-setup',
  'infinite-scroll',
  'react'
];

if (INJECTED_CONFIG && (INJECTED_CONFIG.MIXPANEL_KEY ||
                        INJECTED_CONFIG.MUNCHKIN_KEY ||
                        INJECTED_CONFIG.GOOGLE_ANALYTICS_KEY)) {
  quayDependencies.push('angulartics');
}
if (INJECTED_CONFIG && INJECTED_CONFIG.MIXPANEL_KEY) {
  quayDependencies.push('angulartics.mixpanel');
}
if (INJECTED_CONFIG && INJECTED_CONFIG.MUNCHKIN_KEY) {
  quayDependencies.push('angulartics.marketo');
}
if (INJECTED_CONFIG && INJECTED_CONFIG.GOOGLE_ANALYTICS_KEY) {
  quayDependencies.push('angulartics.google.analytics');
}
if (INJECTED_CONFIG && INJECTED_CONFIG.RECAPTCHA_SITE_KEY) {
  quayDependencies.push('vcRecaptcha');
}

export default angular
  .module('quay', quayDependencies)
  .config(quayConfig)
  .config(routeConfig)
  .constant('NAME_PATTERNS', NAME_PATTERNS)
  .constant('INJECTED_CONFIG', INJECTED_CONFIG)
  .constant('INJECTED_FEATURES', INJECTED_FEATURES)
  .constant('INJECTED_ENDPOINTS', INJECTED_ENDPOINTS)
  .service('ViewArray', ViewArrayImpl)
  .run(quayRun)
  .name;