import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { HttpClientModule } from '@angular/common/http';

import { MatProgressBarModule } from '@angular/material/progress-bar';

import { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';

import { UCapUiModule } from '@ucap-webmessenger/ui';
import { UCapUiAccountModule } from '@ucap-webmessenger/ui-account';

import { UCapWebStorageModule } from '@ucap-webmessenger/web-storage';

import { UCapUtilModule } from '@ucap-webmessenger/util';

import { UCapCommonApiModule } from '@ucap-webmessenger/api-common';
import { UCapExternalApiModule } from '@ucap-webmessenger/api-external';
import { UCapMessageApiModule } from '@ucap-webmessenger/api-message';
import { UCapPublicApiModule } from '@ucap-webmessenger/api-public';

import { UCapPiModule } from '@ucap-webmessenger/pi';

import { UCapProtocolModule } from '@ucap-webmessenger/protocol';
import { UCapAuthenticationProtocolModule } from '@ucap-webmessenger/protocol-authentication';
import { UCapEventProtocolModule } from '@ucap-webmessenger/protocol-event';
import { UCapGroupProtocolModule } from '@ucap-webmessenger/protocol-group';
import { UCapInfoProtocolModule } from '@ucap-webmessenger/protocol-info';
import { UCapInnerProtocolModule } from '@ucap-webmessenger/protocol-inner';
import { UCapOptionProtocolModule } from '@ucap-webmessenger/protocol-option';
import { UCapRoomProtocolModule } from '@ucap-webmessenger/protocol-room';
import { UCapServiceProtocolModule } from '@ucap-webmessenger/protocol-service';
import { UCapStatusProtocolModule } from '@ucap-webmessenger/protocol-status';
import { UCapSyncProtocolModule } from '@ucap-webmessenger/protocol-sync';

import { LoggerModule, NgxLoggerLevel } from 'ngx-logger';

import { AppProviderModule } from './app-provider.module';
import { AppRoutingModule } from './app-routing.module';
import { AppStoreModule } from './app-store.module';
import { AppTranslateModule } from './app-translate.module';

import { AppComponent } from './app.component';

import { GUARDS } from './guards';
import { AppMessengerLayoutModule } from './layouts/messenger/messenger.layout.module';
import { AppNativeLayoutModule } from './layouts/native/native.layout.module';

import { environment } from '../environments/environment';

@NgModule({
  imports: [
    BrowserModule,
    BrowserAnimationsModule,

    HttpClientModule,

    MatProgressBarModule,

    PerfectScrollbarModule,

    UCapCommonApiModule.forRoot(environment.commonApiModuleConfig),

    UCapPublicApiModule.forRoot(environment.publicApiModuleConfig),
    UCapExternalApiModule.forRoot(environment.externalApiModuleConfig),
    UCapMessageApiModule.forRoot(environment.messageApiModuleConfig),

    UCapPiModule.forRoot(environment.piModuleConfig),

    UCapProtocolModule.forRoot(environment.protocolModuleConfig),
    UCapAuthenticationProtocolModule.forRoot(),
    UCapEventProtocolModule.forRoot(),
    UCapGroupProtocolModule.forRoot(),
    UCapInfoProtocolModule.forRoot(),
    UCapInnerProtocolModule.forRoot(),
    UCapOptionProtocolModule.forRoot(),
    UCapRoomProtocolModule.forRoot(),
    UCapServiceProtocolModule.forRoot(),
    UCapStatusProtocolModule.forRoot(),
    UCapSyncProtocolModule.forRoot(),

    UCapUiModule.forRoot(),
    UCapUiAccountModule.forRoot(),

    UCapWebStorageModule.forRoot(),

    UCapUtilModule.forRoot(),

    AppProviderModule,
    AppRoutingModule,
    AppStoreModule,
    AppTranslateModule,

    AppMessengerLayoutModule,
    AppNativeLayoutModule,

    LoggerModule.forRoot({
      level: NgxLoggerLevel.DEBUG
    })
  ],
  providers: [...GUARDS],
  declarations: [AppComponent],
  bootstrap: [AppComponent],
  entryComponents: []
})
export class AppModule {}
