import { NgModule } from '@angular/core';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { RouterModule as ngRouterModule } from '@angular/router';
import { BootstrapComponent, CoreModule, RouterModule, VersionModule } from '@c8y/ngx-components';
import { BulkOperationSchedulerModule } from '@c8y/ngx-components/operations/bulk-operation-scheduler';
import { InputModule } from './input/input.module';
import { BsModalRef } from 'ngx-bootstrap/modal';
import { DashboardModule } from './dashboard';
import { DynamicFormsTutorialModule } from './dynamic-forms';
import { GridsModule } from './grids';
import { HelloModule } from './hello';
import { HooksModule } from './hooks';
import { LazyRoutingModule } from './lazy';
import { ListModule } from './list';
import { ProviderConfigurationTutorialModule } from './provider-configuration';
import { StepperModule } from './stepper';
import { TabsModule } from './tabs';
import { TranslationsModule } from './translations';
import { DashboardWidgetDemoModule } from './widget';
import { WizardModule } from './generic-wizard';
import { RealtimeTutorialModule } from './realtime';
import { WidgetResolversModule } from './widget-resolvers';
import { UserMenuModule } from './user-menu';
import { FormsTutorialModule } from './forms';
import { ClientInterceptorModule } from './client-interceptor';
import { MapExamplesModule } from './maps/map-examples.module';
import { TutorialVersionModule } from './version';
import { DrawerTutorialModule } from './drawer';
import { LazyWidgetModule } from './lazy-widget';
import { cockpitDefaultWidgets } from '@c8y/ngx-components/widgets/cockpit';
import { deviceManagementDefaultWidgets } from '@c8y/ngx-components/widgets/device-management';
import { WidgetsModule } from '@c8y/ngx-components/widgets';

@NgModule({
  declarations: [],
  imports: [
    BrowserAnimationsModule,
    ngRouterModule.forRoot([], { enableTracing: false, useHash: true }),
    RouterModule.forRoot(),
    // Import the CoreModule to add c8y functionality
    CoreModule.forRoot(),

    // The following modules show examples of how to
    HelloModule,
    TabsModule,
    DashboardWidgetDemoModule,
    DashboardModule,
    HooksModule,
    ListModule,
    WizardModule,
    StepperModule,
    GridsModule,
    LazyRoutingModule,
    TranslationsModule,
    BulkOperationSchedulerModule,
    DynamicFormsTutorialModule,
    ProviderConfigurationTutorialModule,
    InputModule,
    RealtimeTutorialModule,
    WidgetResolversModule,
    UserMenuModule,
    FormsTutorialModule,
    ClientInterceptorModule,
    MapExamplesModule,
    // Get rid of a default version factory
    VersionModule.config({ disableWebSDKPluginVersionFactory: true }),
    TutorialVersionModule,
    DrawerTutorialModule,
    LazyWidgetModule,
    WidgetsModule.config({ widgets: [...cockpitDefaultWidgets, ...deviceManagementDefaultWidgets] })
  ],

  providers: [BsModalRef],

  /**
   * Bootstrap your application with the BootstrapComponent which will use the `<c8y-bootstrap>`
   * component to initialize the root application. Alternatively you can bootstrap
   * a component of your choice and include that tag into its template or only reuse the given components
   */
  bootstrap: [BootstrapComponent]
})
export class AppModule {}
