import { ViewArrayImpl } from "./services/view-array/view-array.impl";
import { RegexMatchViewComponent } from "./directives/ui/regex-match-view/regex-match-view.component";
import { NgModule } from 'ng-metadata/core';
import { QuayRoutesModule } from "./quay-routes.module";
import { DockerfilePathSelectComponent } from './directives/ui/dockerfile-path-select/dockerfile-path-select.component';
import { ContextPathSelectComponent } from './directives/ui/context-path-select/context-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 { QuayConfigModule } from './quay-config.module';
import { AppPublicViewComponent } from './directives/ui/app-public-view/app-public-view.component';
import { VisibilityIndicatorComponent } from './directives/ui/visibility-indicator/visibility-indicator.component';
import { CorTableComponent } from './directives/ui/cor-table/cor-table.component';
import { CorTableColumn } from './directives/ui/cor-table/cor-table-col.component';
import { CorTabPanelComponent } from './directives/ui/cor-tabs/cor-tab-panel.component';
import { CorTabContentComponent } from './directives/ui/cor-tabs/cor-tab-content.component';
import { CorTabsComponent } from './directives/ui/cor-tabs/cor-tabs.component';
import { CorTabComponent } from './directives/ui/cor-tabs/cor-tab.component';
import { CorTabPaneComponent } from './directives/ui/cor-tabs/cor-tab-pane.component';
import { CorTabCurrentHandlerFactory } from './directives/ui/cor-tabs/cor-tab-handlers';
import { ChannelIconComponent } from './directives/ui/channel-icon/channel-icon.component';
import { TagSigningDisplayComponent } from './directives/ui/tag-signing-display/tag-signing-display.component';
import { RepositorySigningConfigComponent } from './directives/ui/repository-signing-config/repository-signing-config.component';
import { TimeMachineSettingsComponent } from './directives/ui/time-machine-settings/time-machine-settings.component';
import { DurationInputComponent } from './directives/ui/duration-input/duration-input.component';
import { SearchBoxComponent } from './directives/ui/search-box/search-box.component';
import { TypeaheadDirective } from './directives/ui/typeahead/typeahead.directive';
import { BuildServiceImpl } from './services/build/build.service.impl';
import { AvatarServiceImpl } from './services/avatar/avatar.service.impl';
import { DockerfileServiceImpl } from './services/dockerfile/dockerfile.service.impl';
import { DataFileServiceImpl } from './services/datafile/datafile.service.impl';
import { UtilServiceImpl } from './services/util/util.service.impl';
import { QuayRequireDirective } from './directives/structural/quay-require/quay-require.directive';
import { MarkdownInputComponent } from './directives/ui/markdown/markdown-input.component';
import { MarkdownViewComponent } from './directives/ui/markdown/markdown-view.component';
import { MarkdownToolbarComponent } from './directives/ui/markdown/markdown-toolbar.component';
import { MarkdownEditorComponent } from './directives/ui/markdown/markdown-editor.component';
import { BrowserPlatform, browserPlatform } from './constants/platform.constant';
import { Converter, ConverterOptions } from 'showdown';


/**
 * Main application module.
 */
@NgModule({
  imports: [
    QuayRoutesModule,
    QuayConfigModule,
  ],
  declarations: [
    RegexMatchViewComponent,
    DockerfilePathSelectComponent,
    ContextPathSelectComponent,
    ManageTriggerCustomGitComponent,
    ManageTriggerGithostComponent,
    LinearWorkflowComponent,
    LinearWorkflowSectionComponent,
    AppPublicViewComponent,
    VisibilityIndicatorComponent,
    CorTableComponent,
    CorTableColumn,
    ChannelIconComponent,
    QuayRequireDirective,
    TagSigningDisplayComponent,
    RepositorySigningConfigComponent,
    TimeMachineSettingsComponent,
    DurationInputComponent,
    MarkdownInputComponent,
    MarkdownViewComponent,
    MarkdownToolbarComponent,
    MarkdownEditorComponent,
    SearchBoxComponent,
    TypeaheadDirective,
    CorTabPanelComponent,
    CorTabContentComponent,
    CorTabsComponent,
    CorTabComponent,
    CorTabPaneComponent,
  ],
  providers: [
    ViewArrayImpl,
    BuildServiceImpl,
    AvatarServiceImpl,
    DockerfileServiceImpl,
    DataFileServiceImpl,
    {provide: 'fileReaderFactory', useValue: () => new FileReader()},
    {provide: 'markdownConverterFactory', useValue: (options?: ConverterOptions) => new Converter(options)},
    {provide: 'BrowserPlatform', useValue: browserPlatform},
    {provide: 'CorTabCurrentHandlerFactory', useValue: CorTabCurrentHandlerFactory},
  ],
})
export class QuayModule {

}