import { NgModule } from '@angular/core'
import { CommonModule } from '@angular/common'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'

import { DragDropModule } from '@angular/cdk/drag-drop'

import { MatAutocompleteModule } from '@angular/material/autocomplete'
import { MatBadgeModule } from '@angular/material/badge'
import { MatButtonModule } from '@angular/material/button'
import { MatCardModule } from '@angular/material/card'
import { MatCheckboxModule } from '@angular/material/checkbox'
import { MatChipsModule } from '@angular/material/chips'
import { MatNativeDateModule } from '@angular/material/core'
import { MatDatepickerModule } from '@angular/material/datepicker'
import { MatDialogModule } from '@angular/material/dialog'
import { MatExpansionModule } from '@angular/material/expansion'
import { MatFormFieldModule } from '@angular/material/form-field'
import { MatIconModule } from '@angular/material/icon'
import { MatInputModule } from '@angular/material/input'
import { MatListModule } from '@angular/material/list'
import { MatMenuModule } from '@angular/material/menu'
import { MatPaginatorModule } from '@angular/material/paginator'
import { MatProgressBarModule } from '@angular/material/progress-bar'
import { MatSelectModule } from '@angular/material/select';
import { MatSidenavModule } from '@angular/material/sidenav'
import { MatSnackBarModule } from '@angular/material/snack-bar'
import { MatSortModule } from '@angular/material/sort'
import { MatTableModule } from '@angular/material/table'
import { MatTooltipModule } from '@angular/material/tooltip'

import { FlexLayoutModule } from 'ngx-flexible-layout'

import { AdminComponent } from './admin.component'
import { AdminRoutingModule } from './admin-routing.module'
import { AdminDataService } from './admin-data.service'
import { AdminHomeComponent } from './admin-home/admin-home.component'
import { AdminAccessComponent } from './admin-manage/access/users-roles.component'
import { AdminUserComponent } from './admin-manage/access/user.component'
import { AdminRoleComponent } from './admin-manage/access/role.component'
import { GisafAdminAccessUserDialogComponent } from './admin-manage/access/user-dialog.component'
import { GisafAdminAccessRoleDialogComponent } from './admin-manage/access/role-dialog.component'
import { AdminBasketComponent } from './admin-basket/basket.component'
import { AdminBasketUploadComponent } from './admin-basket/admin-basket-upload/basket-upload.component'
import { AdminListComponent } from './admin-list/admin-list.component'
import { AdminMenuComponent } from './admin-menu/admin-menu.component'
import { AdminPointsByOrigIdComponent } from './admin-manage/points-by-orig-id/points-by-orig-id.component'
import { RawSurveyPointComponent } from './admin-manage/raw-survey-point/raw-survey-point.component'
import { CategoryComponent } from './admin-manage/category/category.component'
import { GisafAdminCategoryDialogComponent } from './admin-manage/category/dialog.component'
import { AdminDetailModule } from './admin-detail/admin-detail.module'
import { AdminManageDataService } from './admin-manage/data.service'
import { AdminManageAccessDataService } from './admin-manage/access/access-data.service'
import { ProjectComponent } from './admin-manage/project/project.component'
import { GisafAdminProjectDialogComponent } from './admin-manage/project/dialog.component';
import { AdminIntegrityComponent } from './admin-manage/integrity/integrity.component'
import { AdminMaintenanceComponent } from './admin-manage/maintenance/maintenance.component'
import { AdminSchedulerMessagesComponent } from './admin-scheduler/messages.component'
import { AdminSchedulerJobsComponent } from './admin-scheduler/jobs.component'
import { AdminSchedulerJobComponent } from './admin-scheduler/job.component'
import { AdminSchedulerFeatureComponent } from './admin-scheduler/feature.component'
import { WebsocketService } from '../_services/websocket.service'
import { PipesModule } from '../pipes.module'

@NgModule({
    imports: [
        CommonModule,

        FormsModule,
        ReactiveFormsModule,

        DragDropModule,

        MatAutocompleteModule,
        MatBadgeModule,
        MatButtonModule,
        MatCardModule,
        MatCheckboxModule,
        MatChipsModule,
        MatNativeDateModule,
        MatDatepickerModule,
        MatDialogModule,
        MatExpansionModule,
        MatFormFieldModule,
        MatIconModule,
        MatInputModule,
        MatListModule,
        MatMenuModule,
        MatPaginatorModule,
        MatProgressBarModule,
        MatSelectModule,
        MatSidenavModule,
        MatSnackBarModule,
        MatSortModule,
        MatTableModule,
        MatTooltipModule,

        FlexLayoutModule,

        AdminRoutingModule,
        AdminDetailModule,
        PipesModule,
    ],
    declarations: [
        AdminComponent,
        AdminHomeComponent,
        AdminAccessComponent,
        AdminUserComponent,
        AdminRoleComponent,
        GisafAdminAccessUserDialogComponent,
        GisafAdminAccessRoleDialogComponent,
        AdminBasketComponent,
        AdminBasketUploadComponent,
        AdminListComponent,
        AdminMenuComponent,
        AdminPointsByOrigIdComponent,
        RawSurveyPointComponent,
        CategoryComponent,
        GisafAdminCategoryDialogComponent,
        ProjectComponent,
        GisafAdminProjectDialogComponent,
        AdminIntegrityComponent,
        AdminMaintenanceComponent,
        AdminSchedulerFeatureComponent,
        AdminSchedulerJobsComponent,
        AdminSchedulerJobComponent,
        AdminSchedulerMessagesComponent,
    ],
    providers: [
        AdminDataService,
        AdminManageDataService,
        AdminManageAccessDataService,
        WebsocketService,
    ]
})
export class AdminModule { }
