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 { UCapCommonApiModule } from '@ucap-webmessenger/api-common';
import { UCapExternalApiModule } from '@ucap-webmessenger/api-external';
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 { UCapInnerProtocolModule } from '@ucap-webmessenger/protocol-inner';
import { UCapOptionProtocolModule } from '@ucap-webmessenger/protocol-option';

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 { environment } from '../environments/environment';

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';

@NgModule({
  imports: [
    BrowserModule,
    BrowserAnimationsModule,

    HttpClientModule,

    MatProgressBarModule,

    UCapCommonApiModule.forRoot({ urls: environment.urls.apiCommon }),

    UCapPublicApiModule.forRoot({
      urls: environment.urls.apiPublic
    }),
    UCapExternalApiModule.forRoot({
      urls: environment.urls.apiExternal
    }),

    UCapPiModule.forRoot({
      urls: environment.urls.pi
    }),

    UCapProtocolModule.forRoot({
      urls: environment.urls.protocol,
      reconnect: environment.protocol.reconnect,
      requestId: environment.protocol.requestId
    }),
    UCapAuthenticationProtocolModule.forRoot(),
    UCapInnerProtocolModule.forRoot(),
    UCapOptionProtocolModule.forRoot(),

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

    UCapWebStorageModule.forRoot(),

    UCapUtilModule.forRoot(),

    AppProviderModule,
    AppRoutingModule,
    AppStoreModule,
    AppTranslateModule
  ],
  providers: [...GUARDS],
  declarations: [AppComponent],
  bootstrap: [AppComponent],
  entryComponents: []
})
export class AppModule {}
