import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { AppRoutingModule } from './app-routing.module'
import { AppComponent } from './app.component'
import { UserManagementComponent } from './module/pages/admin/userManagment/userManagement.component'
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
import { MatFormFieldModule } from '@angular/material/form-field'
import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'
import { SignupComponent } from './module/pages/signup/signup.component'
import { StationComponent } from './module/pages/admin/stationManagement/station/station.component'
import { ClientComponent } from './module/pages/admin/stationManagement/client/client.component'
import { SensorComponent } from './module/pages/admin/stationManagement/sensor/sensor.component'
import { HostComponent } from './module/pages/admin/stationManagement/host/host.component'
import { EventEmitterService } from './shared/event.emitter.service'

import { BrowserAnimationsModule } from '@angular/platform-browser/animations'
import { MatIconModule } from '@angular/material/icon'
import { StationManagementComponent } from './module/pages/admin/stationManagement/stationManagement.component'
import { MatSelectModule } from '@angular/material/select'
import { MatInputModule } from '@angular/material/input'
import { MAT_DATE_FORMATS, MatDateFormats, MatNativeDateModule, NativeDateModule } from '@angular/material/core'
import { DataHeaderComponent } from './module/pages/admin/stationManagement/header/data-header/data-header.component'
import {
  ConfigHeaderComponent,
} from './module/pages/admin/stationManagement/header/config-header/config-header.component'

import { CjsTimline } from './module/components/charts/Cjs-timeline/cjsTimlineMultiple.component'
import { ProViewComponent } from './module/components/pro-view/pro-view.component'
import { MatAutocompleteModule } from '@angular/material/autocomplete'
import { MatCheckboxModule } from '@angular/material/checkbox'
import { InterceptorService } from './shared/auth/interceptor.service'
import { CjsTimelineMultiple } from './module/components/charts/Cjs-timeline-multiple/cjsTimlineMultiple.component'
import { MatButtonModule } from '@angular/material/button'
import { ThermometerComponent } from './module/components/customUX/thermometer/thermometer.component'
import { HomeComponent } from './module/pages/home/home.component'
import { LoginTailwindcssComponent } from './module/pages/login/login.component'
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'
import { SliderComponent } from './module/components/customUX/slider/slider.component'
import { MatSliderModule } from '@angular/material/slider'
import { MatCardModule } from '@angular/material/card'
import { ApiModule } from '../../projects/generated-api/src'
import { SummaryComponent } from './module/pages/home/summary/summary.component'
import { ListIconComponent } from './module/pages/home/summary/list-icon/list-icon.component'
import { MatDatepickerModule } from '@angular/material/datepicker'
import { MomentDateModule } from '@angular/material-moment-adapter'
import { StationConfigComponent } from './module/pages/home/station-config/station-config.component'
import { MatTreeModule } from '@angular/material/tree'
import { FormDialogComponent } from './module/components/customUX/forms/form-dialog/form-dialog.component'

const MY_DATE_FORMATS: MatDateFormats = {
  parse: {
    dateInput: 'DD/MM/YYYY',
  },
  display: {
    dateInput: 'DD/MM/YYYY',
    monthYearLabel: 'MMMM YYYY',
    dateA11yLabel: 'DD/MM/YYYY',
    monthYearA11yLabel: 'MMMM YYYY',
  },
}

@NgModule({
  declarations: [
    AppComponent,
    UserManagementComponent,
    SignupComponent,
    StationComponent,
    HostComponent,
    ClientComponent,
    SensorComponent,
    StationManagementComponent,
    SummaryComponent,
    DataHeaderComponent,
    ConfigHeaderComponent,
    CjsTimline,
    ProViewComponent,
    CjsTimelineMultiple,
    ThermometerComponent,
    HomeComponent,
    LoginTailwindcssComponent,
    SliderComponent,
    SummaryComponent,
    ListIconComponent,
    StationConfigComponent,
    FormDialogComponent,
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    ReactiveFormsModule,
    HttpClientModule,
    FormsModule,
    BrowserAnimationsModule,
    MatIconModule,
    MatFormFieldModule,
    MatSelectModule,
    MatDatepickerModule,
    MatInputModule,
    MatNativeDateModule,
    MatAutocompleteModule,
    MatCheckboxModule,
    MatButtonModule,
    ApiModule,
    FontAwesomeModule,
    MatSliderModule,
    MatCardModule,
    MatDatepickerModule,
    NativeDateModule,
    MomentDateModule,
    MatTreeModule,
  ],
  //Todo remove old swagger client
  providers: [
    EventEmitterService,
    { provide: HTTP_INTERCEPTORS, useClass: InterceptorService, multi: true },
    { provide: MAT_DATE_FORMATS, useValue: MY_DATE_FORMATS },
  ],
  bootstrap: [AppComponent],
})
export class AppModule {
}