/* tslint:disable */
/* eslint-disable */
import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { {{configurationClass}}, {{configurationParams}} } from './{{configurationFile}}';

{{#services}}import { {{typeName}} } from './services/{{fileName}}';
{{/services}}

/**
 * Module that provides all services and configuration.
 */
@NgModule({
  imports: [],
  exports: [],
  declarations: [],
  providers: [
{{#services}}    {{typeName}},
{{/services}}
    {{configurationClass}}
  ],
})
export class {{moduleClass}} {
  static forRoot(params: {{configurationParams}}): ModuleWithProviders<{{moduleClass}}> {
    return {
      ngModule: {{moduleClass}},
      providers: [
        {
          provide: {{configurationClass}},
          useValue: params
        }
      ]
    }
  }

  constructor( 
    @Optional() @SkipSelf() parentModule: {{moduleClass}},
    @Optional() http: HttpClient
  ) {
    if (parentModule) {
      throw new Error('{{moduleClass}} is already loaded. Import in your base AppModule only.');
    }
    if (!http) {
      throw new Error('You need to import the HttpClientModule in your AppModule! \n' +
      'See also https://github.com/angular/angular/issues/20575');
    }
  }
}
