import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CoreModule, HOOK_NAVIGATOR_NODES, HOOK_ROUTE, ViewContext } from '@c8y/ngx-components';
import { ContextDashboardModule } from '@c8y/ngx-components/context-dashboard';
import { ContextDashboardComponent } from './context-dashboard.component';
import { AssetSelectorExampleComponent } from './asset-selector-example.component';
import { AssetSelectorModule } from '@c8y/ngx-components/assets-navigator';
import { NamedContextDashboardComponent } from './named-context-dashboard.component';
import { CustomDashboardComponent } from './custom-dashboard.component';
import { DashboardNavigationFactory } from './dashboard-navigation';
import { ServiceDashboardComponent } from './service-dashboard.component';
import { WidgetDashboardComponent } from './widget-dashboard.component';
import { DatapointSelectorModule } from '@c8y/ngx-components/datapoint-selector';
import { DatapointSelectionExampleComponent } from './datapoint-selection-example/datapoint-selection-example.component';

/**
 * Angular Routes.
 * Within this array at least path (url) and components are linked.
 */
const routes: Routes = [
  {
    path: 'dashboards/custom',
    component: CustomDashboardComponent
  },
  {
    path: 'dashboards/widget',
    component: WidgetDashboardComponent
  },
  {
    path: 'dashboards/context',
    component: ContextDashboardComponent
  },
  {
    path: 'dashboards/selector',
    component: AssetSelectorExampleComponent
  },
  {
    path: 'dashboards/datapoint-selection',
    component: DatapointSelectionExampleComponent
  }
];

@NgModule({
  declarations: [
    CustomDashboardComponent,
    WidgetDashboardComponent,
    ContextDashboardComponent,
    NamedContextDashboardComponent,
    AssetSelectorExampleComponent,
    ServiceDashboardComponent,
    DatapointSelectionExampleComponent
  ],
  imports: [
    ContextDashboardModule.config(),
    CommonModule,
    RouterModule.forChild(routes),
    CoreModule,
    ContextDashboardModule,
    AssetSelectorModule,
    DatapointSelectorModule
  ],
  providers: [
    { provide: HOOK_NAVIGATOR_NODES, useClass: DashboardNavigationFactory, multi: true },
    {
      provide: HOOK_ROUTE,
      useValue: [
        {
          path: 'named-context',
          context: ViewContext.Device,
          component: NamedContextDashboardComponent,
          label: 'Named-context dashboard',
          priority: 900,
          icon: 'rocket'
        }
      ],
      multi: true
    }
  ]
})
export class DashboardModule {}
