import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { UniversalModule } from 'angular2-universal';

import { FlexLayoutModule } from '@angular/flex-layout';
import { MaterialModule } from '@angular/material';

import { DndModule } from 'ng2-dnd';


import { AppComponent } from './components/app/app.component'
import { NavMenuComponent } from './components/navmenu/navmenu.component';
import { HomeComponent } from './components/home/home.component';
import { FetchDataComponent } from './components/fetchdata/fetchdata.component';
import { CounterComponent } from './components/counter/counter.component';

import { TfabricaMainComponent } from './components/main/tfabrica.main.component';
import { TfabricaSidenavComponent } from './components/main/tfabrica.sidenav.component';
import { TfabricaLoginComponent } from './components/login/tfabrica.login.component';
import { TfabricaToolbarComponent } from './components/main/tfabrica.toolbar.component';
import { TfabricaDashboardComponent } from './components/home/tfabrica.dashboard.component';
import { TfabricaUserDataComponent } from './components/main/tfabrica.userdata.component';

import { TfabricaSharedService } from './components/main/tfabrica.shared.service';
import { TfabricaLoginService } from './components/login/tfabrica.login.service';
import { TfabricaUserMenuService } from './components/main/tfabrica.usermenu.service';
import { TfabricaAuthGuardService } from './components/main/tfabrica.authguard.service';

import { TRANSLATION_PROVIDERS }   from './components/translate/tfabrica.translations';
import { TfabricaTranslatePipe }   from './components/translate/tfabrica.translate.pipe';
import { TfabricaTranslateService } from './components/translate/tfabrica.translate.service';


import { TfabricaMessageDialogComponent } from './components/main/tfabrica.message.dialog.component';
import { TfabricaCrudReadComponent } from './components/crud/tfabrica.crud.read.component';
import { TfabricaCrudService } from './components/crud/tfabrica.crud.service';
import { TfabricaCrudSelectFieldsComponent } from './components/crud/tfabrica.crud.selectfields.component';
import { TfabricaCrudFilterFieldsComponent } from './components/crud/tfabrica.crud.filterfields.component';

import { routing } from './app.routes';


@NgModule({
    bootstrap: [ AppComponent ],
    declarations: [
        AppComponent,
        NavMenuComponent,
        CounterComponent,
        FetchDataComponent,
        HomeComponent,
        TfabricaMainComponent,
        TfabricaSidenavComponent,
        TfabricaLoginComponent,
        TfabricaToolbarComponent,
        TfabricaDashboardComponent,
        TfabricaUserDataComponent,
        TfabricaMessageDialogComponent,
        TfabricaCrudReadComponent,
        TfabricaCrudSelectFieldsComponent,
        TfabricaCrudFilterFieldsComponent,

        TfabricaTranslatePipe

    ],
    entryComponents: [
        TfabricaCrudSelectFieldsComponent,
        TfabricaCrudFilterFieldsComponent,
        TfabricaMessageDialogComponent
        ],
    imports: [
        UniversalModule, // Must be first import. This automatically imports BrowserModule, HttpModule, and JsonpModule too.

        MaterialModule,
        FlexLayoutModule.forRoot(),

        DndModule.forRoot(),

        routing
                /*
        RouterModule.forRoot([
            { path: '', redirectTo: 'home', pathMatch: 'full' },
            { path: 'home', component: HomeComponent },
            { path: 'counter', component: CounterComponent },
            { path: 'fetch-data', component: FetchDataComponent },
            { path: '**', redirectTo: 'home' }
        ])
        */
    ],
    providers: [
        TfabricaSharedService,
        TfabricaLoginService,
        TfabricaUserMenuService,
        TfabricaAuthGuardService,

        TfabricaCrudService,

        TRANSLATION_PROVIDERS,
        TfabricaTranslateService
    ]
})
export class AppModule {
}
