import * as angular from "angular";
import { ViewArrayImpl } from "./services/view-array/view-array.impl";
import { NAME_PATTERNS } from "./constants/name-patterns.constant";
import { INJECTED_CONFIG, INJECTED_FEATURES, INJECTED_ENDPOINTS } from "./constants/injected-values.constant";
import { RegexMatchViewComponent } from "./directives/ui/regex-match-view/regex-match-view.component";
import { NgModule } from "angular-ts-decorators";
import { QuayRoutes } from "./quay-routes.module";
import { DockerfilePathSelectComponent } from './directives/ui/dockerfile-path-select/dockerfile-path-select.component';
import { ManageTriggerCustomGitComponent } from './directives/ui/manage-trigger-custom-git/manage-trigger-custom-git.component';
import { ManageTriggerGithostComponent } from './directives/ui/manage-trigger-githost/manage-trigger-githost.component';
import { LinearWorkflowComponent } from './directives/ui/linear-workflow/linear-workflow.component';
import { LinearWorkflowSectionComponent } from './directives/ui/linear-workflow/linear-workflow-section.component';
import { QuayConfig } from './quay-config.module';
import { QuayRun } from './quay-run.module';


/**
 * Main application module.
 */
@NgModule({
  imports: [
    QuayRoutes,
    QuayConfig,
    QuayRun,
  ],
  declarations: [
    RegexMatchViewComponent,
    DockerfilePathSelectComponent,
    ManageTriggerCustomGitComponent,
    ManageTriggerGithostComponent,
    LinearWorkflowComponent,
    LinearWorkflowSectionComponent,
  ],
  providers: [
    ViewArrayImpl,
  ],
})
export class quay {

}

// TODO: Make injected values into services and move to NgModule.providers, as constants are not supported in Angular 2
angular
  .module(quay.name)
  .constant('NAME_PATTERNS', NAME_PATTERNS)
  .constant('INJECTED_CONFIG', INJECTED_CONFIG)
  .constant('INJECTED_FEATURES', INJECTED_FEATURES)
  .constant('INJECTED_ENDPOINTS', INJECTED_ENDPOINTS);