import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import {MatButtonModule} from '@angular/material/button'; 
import {MatGridListModule} from '@angular/material/grid-list';
import {MatToolbarModule} from '@angular/material/toolbar'; 
import {MatIconModule} from '@angular/material/icon';  
import { ReactiveFormsModule } from '@angular/forms';
import {MatFormFieldModule} from '@angular/material/form-field'; 
import {MatInputModule} from '@angular/material/input';
import {MatTooltipModule} from '@angular/material/tooltip';
import { HttpClientModule } from '@angular/common/http';
import {MatSnackBarModule} from '@angular/material/snack-bar';
import {MatSidenavModule} from '@angular/material/sidenav';     
import {MatListModule} from '@angular/material/list';
import {MatMenuModule} from '@angular/material/menu'; 
import {MatTableModule} from '@angular/material/table'; 
import {MatDatepickerModule} from '@angular/material/datepicker'; 
import { MatNativeDateModule } from '@angular/material/core';
import {MatDividerModule} from '@angular/material/divider'; 
import {MatDialogModule} from '@angular/material/dialog'; 
import {MatSelectModule} from '@angular/material/select'; 
import {MatCardModule} from '@angular/material/card';
import { NgxMatSelectSearchModule } from 'ngx-mat-select-search';
import {MatCheckboxModule} from '@angular/material/checkbox';
import {MatTabsModule} from '@angular/material/tabs';

import { FormsModule } from '@angular/forms';
import {MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS} from '@angular/material-moment-adapter';
import {DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE} from '@angular/material/core';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { LoginPageComponent } from './instructor/pages/login-page/login-page.component';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MainPageComponent } from './main-page/main-page.component';
import { LoginFormComponent } from './instructor/components/login-form/login-form.component';
import { WelcomePageComponent } from './welcome-page/welcome-page.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
import { CoursesBasicTableComponent } from './courses/components/courses-basic-table/courses-basic-table.component';
import { RegisterPageComponent } from './instructor/pages/register-page/register-page.component';
import { CoursesPageComponent } from './courses/pages/courses-page/courses-page.component';
import { MyCoursesPageComponent } from './courses/pages/my-courses-page/my-courses-page.component';
import { RegisterFormComponent } from './instructor/components/register-form/register-form.component';
import { InstructorProfilePageComponent } from './instructor/pages/instructor-profile-page/instructor-profile-page.component';

import { PhonePipe } from './pipes/phone-pipe';
import { GenderPipe } from './pipes/gender-pipe';
import { UtfLengthErrorPipe } from './pipes/utf-length-error-pipe';
import { InstructorNamesPipe } from './pipes/instructor-names-pipe';
import { InstructorRequestsPipe } from './pipes/instructor-requests-pipe';

import { MaxUtf8LengthValidator } from './validators/utf-length.directive';
import { NumberValueValidator } from './validators/number-value.directive';
import { PasswordCheckValidator } from './validators/password-check.directive';

import { DATEPICKER_FORMATS } from './global-settings/datepicker-formats';
import { MyProfilePageComponent } from './instructor/pages/my-profile-page/my-profile-page.component';
import { InstructorInfoBlockComponent } from './instructor/components/instructor-info-block/instructor-info-block.component';
import { AllInstructorsPageComponent } from './instructor/pages/all-instructors-page/all-instructors-page.component';
import { InstructorsBasicTableComponent } from './instructor/components/instructors-basic-table/instructors-basic-table.component';
import { NotAuthorizedPageComponent } from './error/not-authorized-page/not-authorized-page.component';
import { MainNotApprovedPageComponent } from './instructor/pages/main-not-approved-page/main-not-approved-page.component';
import { LoadingPlaceholderComponent } from './global-components/loading-placeholder/loading-placeholder.component';
import { ChangeRoleDialogComponent } from './instructor/components/change-role-dialog/change-role-dialog.component';
import { SavingStatusComponent } from './global-components/saving-status/saving-status.component';
import { EditInstructorProfilePageComponent } from './instructor/pages/edit-instructor-profile-page/edit-instructor-profile-page.component';
import { EditProfileFormComponent } from './instructor/components/edit-profile-form/edit-profile-form.component';
import { EditMyProfilePageComponent } from './instructor/pages/edit-my-profile-page/edit-my-profile-page.component';
import { NotificationPagesComponent } from './instructor/pages/notification-pages/notification-pages.component';
import { NewCoursePageComponent } from './courses/pages/new-course-page/new-course-page.component';
import { PageLinkButtonComponent } from './global-components/page-link-button/page-link-button.component';
import { ReturnLinkButtonComponent } from './global-components/return-link-button/return-link-button.component';
import { EditCourseFormComponent } from './courses/components/edit-course-form/edit-course-form.component';
import { AllThemesPageComponent } from './course-themes/pages/all-themes-page/all-themes-page.component';
import { CourseThemeCardComponent } from './course-themes/components/course-theme-card/course-theme-card.component';
import { AllSchoolsPageComponent } from './instructor/pages/all-schools-page/all-schools-page.component';
import { SchoolsTableComponent } from './instructor/components/schools-table/schools-table.component';
import { CourseDetailPageComponent } from './courses/pages/course-detail-page/course-detail-page.component';
import { CourseBasicInfoComponent } from './courses/components/course-basic-info/course-basic-info.component';
import { EditCoursePageComponent } from './courses/pages/edit-course-page/edit-course-page.component';
import { CoursesTableWithInstructorsComponent } from './courses/components/courses-table-with-instructors/courses-table-with-instructors.component';
import { CourseInstructorsInfoComponent } from './courses/components/course-instructors-info/course-instructors-info.component';
import { CourseInstructorsDialogComponent } from './courses/components/course-instructors-dialog/course-instructors-dialog.component';
import { NewThemePageComponent } from './course-themes/pages/new-theme-page/new-theme-page.component';
import { EditThemeFormComponent } from './course-themes/components/edit-theme-form/edit-theme-form.component';
import { EditThemePageComponent } from './course-themes/pages/edit-theme-page/edit-theme-page.component';
import { SchoolDetailPageComponent } from './school/pages/school-detail-page/school-detail-page.component';
import { SchoolInfoBlockComponent } from './school/components/school-info-block/school-info-block.component';
import { EditSchoolDetailPageComponent } from './school/pages/edit-school-detail-page/edit-school-detail-page.component';
import { EditSchoolFormComponent } from './school/components/edit-school-form/edit-school-form.component';
import { SchoolLoginPageComponent } from './school/pages/school-login-page/school-login-page.component';
import { SchoolLoginFormComponent } from './school/components/school-login-form/school-login-form.component';
import { SchoolMainPageComponent } from './school/pages/school-main-page/school-main-page.component';
import { EditSchoolProfilePageComponent } from './school/pages/edit-school-profile-page/edit-school-profile-page.component';
import { SchoolProfilePageComponent } from './school/pages/school-profile-page/school-profile-page.component';
import { SchoolCoursesPageComponent } from './school/pages/school-courses-page/school-courses-page.component';
import { EnlistCoursePageComponent } from './school/pages/enlist-course-page/enlist-course-page.component';
import { SchoolCoursesTableComponent } from './school/components/school-courses-table/school-courses-table.component';
import { EnlistCourseFormComponent } from './courses/components/enlist-course-form/enlist-course-form.component';
import { SchoolRegisterPageComponent } from './school/pages/school-register-page/school-register-page.component';
import { SchoolRegisterFormComponent } from './school/components/school-register-form/school-register-form.component';
import { SchoolQuestionnairePageComponent } from './school/pages/school-questionnaire-page/school-questionnaire-page.component';
import { SchoolCourseBasicInfoComponent } from './school/components/school-course-basic-info/school-course-basic-info.component';
import { EditQuestionnaireFormComponent } from './school/components/edit-questionnaire-form/edit-questionnaire-form.component';
import { MyFundPageComponent } from './funds/pages/my-fund-page/my-fund-page.component';
import { FundTableComponent } from './funds/components/fund-table/fund-table.component';
import { InstructorFundDetailComponent } from './funds/components/instructor-fund-detail/instructor-fund-detail.component';
import { CoursesHistoryBlockComponent } from './courses/components/courses-history-block/courses-history-block.component';
import { CoursesHistoryTableComponent } from './courses/components/courses-history-table/courses-history-table.component';
import { InstructorEvaluationBlockComponent } from './instructor/components/instructor-evaluation-block/instructor-evaluation-block.component';
import { InstructorEvaluationListComponent } from './instructor/components/instructor-evaluation-list/instructor-evaluation-list.component';
import { EditFundTransactionDialogComponent } from './instructor/components/edit-fund-transaction-dialog/edit-fund-transaction-dialog.component';
import { CourseInstructorEvaluationBlockComponent } from './courses/components/course-instructor-evaluation-block/course-instructor-evaluation-block.component';
import { CourseInstructorEvaluationListComponent } from './courses/components/course-instructor-evaluation-list/course-instructor-evaluation-list.component';
import { EditInstructorEvaluationDialogComponent } from './courses/components/edit-instructor-evaluation-dialog/edit-instructor-evaluation-dialog.component';
import { QuestionnaireInfoBlockComponent } from './courses/components/questionnaire-info-block/questionnaire-info-block.component';
import { CourseReportBlockComponent } from './courses/components/course-report-block/course-report-block.component';
import { CourseReportDialogComponent } from './courses/components/course-report-dialog/course-report-dialog.component';
import { InstructorProfileApproveTableComponent } from './instructor/components/instructor-profile-approve-table/instructor-profile-approve-table.component';
import { CourseApproveTableComponent } from './courses/components/courses-approve-table/courses-approve-table.component';
import { InstructorPayoutsPageComponent } from './instructor/pages/instructor-payouts-page/instructor-payouts-page.component';
import { InstructorPayoutsTableComponent } from './instructor/components/instructor-payouts-table/instructor-payouts-table.component';
import { DietSummaryPageComponent } from './courses/pages/diet-summary-page/diet-summary-page.component';
import { AccommodationSummaryPageComponent } from './courses/pages/accommodation-summary-page/accommodation-summary-page.component';
import { DietDailySummaryListComponent } from './courses/components/diet-daily-summary-list/diet-daily-summary-list.component';
import { AccommondationWeeklySummaryListComponent } from './courses/components/accommondation-weekly-summary-list/accommondation-weekly-summary-list.component';
import { MainBlockedPageComponent } from './instructor/pages/main-blocked-page/main-blocked-page.component';
import { SchoolPrivacyAgreementDialogComponent } from './school/components/school-privacy-agreement-dialog/school-privacy-agreement-dialog.component';
import { InstructorPrivacyAgreementDialogComponent } from './instructor/components/instructor-privacy-agreement-dialog/instructor-privacy-agreement-dialog.component';

@NgModule({
  declarations: [
    AppComponent,
    PhonePipe,
    GenderPipe,
    InstructorNamesPipe,
    InstructorRequestsPipe,
    UtfLengthErrorPipe,
    MaxUtf8LengthValidator,
    NumberValueValidator,
    PasswordCheckValidator,
    LoginPageComponent,
    MainPageComponent,
    LoginFormComponent,
    WelcomePageComponent,
    PageNotFoundComponent,
    CoursesBasicTableComponent,
    RegisterPageComponent,
    CoursesPageComponent,
    MyCoursesPageComponent,
    RegisterFormComponent,
    MyProfilePageComponent,
    InstructorInfoBlockComponent,
    AllInstructorsPageComponent,
    InstructorsBasicTableComponent,
    NotAuthorizedPageComponent,
    MainNotApprovedPageComponent,
    LoadingPlaceholderComponent,
    InstructorProfilePageComponent,
    ChangeRoleDialogComponent,
    SavingStatusComponent,
    EditInstructorProfilePageComponent,
    EditProfileFormComponent,
    EditMyProfilePageComponent,
    NotificationPagesComponent,
    NewCoursePageComponent,
    PageLinkButtonComponent,
    ReturnLinkButtonComponent,
    EditCourseFormComponent,
    AllThemesPageComponent,
    CourseThemeCardComponent,
    AllSchoolsPageComponent,
    SchoolsTableComponent,
    CourseDetailPageComponent,
    CourseBasicInfoComponent,
    EditCoursePageComponent,
    CoursesTableWithInstructorsComponent,
    CourseInstructorsInfoComponent,
    CourseInstructorsDialogComponent,
    NewThemePageComponent,
    EditThemeFormComponent,
    EditThemePageComponent,
    SchoolDetailPageComponent,
    SchoolInfoBlockComponent,
    EditSchoolDetailPageComponent,
    EditSchoolFormComponent,
    SchoolLoginPageComponent,
    SchoolLoginFormComponent,
    SchoolMainPageComponent,
    EditSchoolProfilePageComponent,
    SchoolProfilePageComponent,
    SchoolCoursesPageComponent,
    EnlistCoursePageComponent,
    SchoolCoursesTableComponent,
    EnlistCourseFormComponent,
    SchoolRegisterPageComponent,
    SchoolRegisterFormComponent,
    SchoolQuestionnairePageComponent,
    SchoolCourseBasicInfoComponent,
    EditQuestionnaireFormComponent,
    MyFundPageComponent,
    FundTableComponent,
    InstructorFundDetailComponent,
    CoursesHistoryBlockComponent,
    CoursesHistoryTableComponent,
    InstructorEvaluationBlockComponent,
    InstructorEvaluationListComponent,
    EditFundTransactionDialogComponent,
    CourseInstructorEvaluationBlockComponent,
    CourseInstructorEvaluationListComponent,
    EditInstructorEvaluationDialogComponent,
    QuestionnaireInfoBlockComponent,
    CourseReportBlockComponent,
    CourseReportDialogComponent,
    InstructorProfileApproveTableComponent,
    CourseApproveTableComponent,
    InstructorPayoutsPageComponent,
    InstructorPayoutsTableComponent,
    DietSummaryPageComponent,
    AccommodationSummaryPageComponent,
    DietDailySummaryListComponent,
    AccommondationWeeklySummaryListComponent,
    MainBlockedPageComponent,
    SchoolPrivacyAgreementDialogComponent,
    InstructorPrivacyAgreementDialogComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    AppRoutingModule,
    MatButtonModule,
    BrowserAnimationsModule,
    MatGridListModule,
    MatToolbarModule,
    MatIconModule,
    MatInputModule,
    ReactiveFormsModule,
    MatFormFieldModule,
    FormsModule,
    MatTooltipModule,
    MatSnackBarModule,
    MatSidenavModule,
    MatListModule,
    MatMenuModule,
    MatTableModule,
    MatDatepickerModule,
    MatNativeDateModule,
    MatDividerModule,
    MatDialogModule,
    MatSelectModule,
    MatCardModule,
    NgxMatSelectSearchModule,
    MatCheckboxModule,
    MatTabsModule
  ],
  providers: [
    { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS] },
    {provide: MAT_DATE_FORMATS, useValue: DATEPICKER_FORMATS},
    {provide: MAT_DATE_LOCALE, useValue: 'cs'}
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }
