import {Injector, NgModule} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import {NgSelectModule} from '@ng-select/ng-select';
import {CommonModule} from '@angular/common';
import {FormsModule} from '@angular/forms';
import {HttpClientModule} from '@angular/common/http';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {TableModule} from 'primeng/table';

import {ExplorerPageComponent} from './pages/explorer-page/explorer-page.component';
import {QueryTileComponent} from './components/query-tile/query-tile.component';
import {LaunchAnalysisComponent} from './dialogs/launch-analysis/launch-analysis.component';
import {DatasetTileComponent} from './components/dataset-tile/dataset-tile.component';
import {AnalysisPanelComponent} from './components/analysis-panel/analysis-panel.component';
import {TaskListComponent} from './components/task-list/task-list.component';
import {ToggleComponent} from './components/toggle/toggle.component';
import {InfoTileComponent} from './components/info-tile/info-tile.component';
import {CustomProteinsComponent} from './dialogs/custom-proteins/custom-proteins.component';
import { DownloadButtonComponent } from './components/download-button/download-button.component';

import {MatTooltipModule} from '@angular/material/tooltip';

import {AnalysisService} from './services/analysis/analysis.service';
import {AddExpressedProteinsComponent} from './dialogs/add-expressed-proteins/add-expressed-proteins.component';
import {createCustomElement} from '@angular/elements';
import {NetworkLegendComponent} from './components/network-legend/network-legend.component';
import {ProtTableComponent} from './components/analysis-panel/prot-table/prot-table.component';
import {DrugTableComponent} from './components/analysis-panel/drug-table/drug-table.component';

import {FontAwesomeModule} from '@fortawesome/angular-fontawesome';
import fontawesome from '@fortawesome/fontawesome';
import {faTimes, faAngleUp, faAngleLeft, faCapsules, faCrosshairs, faFlask, faCheck, faCamera, faDownload,
  faRulerVertical, faDna, faMicroscope, faBook, faPause, faTrash, faSpinner, faExclamationTriangle, faPlus,
  faExpand, faInfo, faRocket, faAngleDown, faSearch, faFastForward, faExternalLinkAlt, faTasks, faFilter,
  faMinus, faUpload, faAngleDoubleDown, faSync, faBroom, faAngleDoubleUp
} from '@fortawesome/free-solid-svg-icons';
import {TooltipModule} from 'primeng/tooltip';

@NgModule({
  declarations: [
    ExplorerPageComponent,
    QueryTileComponent,
    LaunchAnalysisComponent,
    DatasetTileComponent,
    AnalysisPanelComponent,
    TaskListComponent,
    ToggleComponent,
    InfoTileComponent,
    CustomProteinsComponent,
    AddExpressedProteinsComponent,
    NetworkLegendComponent,
    ProtTableComponent,
    DrugTableComponent,
    DownloadButtonComponent,
  ],
  imports: [
    BrowserModule,
    NgSelectModule,
    FormsModule,
    CommonModule,
    HttpClientModule,
    BrowserAnimationsModule,
    TableModule,
    FontAwesomeModule,
    MatTooltipModule,
    TooltipModule,
  ],
  providers: [AnalysisService],
})
export class AppModule {


  constructor(injector: Injector) {
    // @ts-ignore
    fontawesome.library.add(faTimes, faTimes, faAngleUp, faAngleLeft, faCapsules, faCrosshairs, faFlask,
      faCheck, faCamera, faDownload, faRulerVertical, faDna, faMicroscope, faBook, faPause, faTrash,
      faSpinner, faExclamationTriangle, faPlus, faExpand, faInfo, faRocket, faAngleDown, faSearch,
      faFastForward, faExternalLinkAlt, faTasks, faFilter, faMinus, faUpload, faAngleDoubleDown,
      faSync, faBroom, faAngleDoubleUp);
    const NetworkExpander = createCustomElement(ExplorerPageComponent, {injector});
    // Register the custom element with the browser.
    customElements.define('drugst-one', NetworkExpander);
  }

  ngDoBootstrap() {
  }

}