import { NgModule, enableProdMode, LOCALE_ID }   from '@angular/core'
import { CommonModule, registerLocaleData }               from '@angular/common'
import { FormsModule }                from '@angular/forms'
import { HttpModule }                 from '@angular/http'
import { HttpClientModule, HTTP_INTERCEPTORS }           from '@angular/common/http'

import '@k-core/extensions/rxjs.extension'



// ---- Module specific ----

// Components
import { AppBauhausComponent }          from './components/app/cmp.app'

// Modules
import { MenuBauhausModule } 			from '@k-sites/bauhaus/modules/menu/mod.menu'
import { HeaderModule }					from '@k-sites/bauhaus/modules/header/mod.header'
import { FooterModule }					from '@k-sites/bauhaus/modules/footer/mod.footer'
import { BlockModule }					from '@k-sites/bauhaus/modules/block/mod.block'

// Route
import { AppRoutingModule }         	from './rte.app'




// ---- Core ----

// Components
import { BreadCrumbsComponent }     	from '@k-core/modules/app-base/components/breadcrumbs/cmp.breadcrumbs'
import { PrivacyPageComponent }			from '@k-core/modules/videoConsent/components/privacy-page/cmp.privacy-page'
import { BusCampignDialogComponent, CampaignDialogComponent, CampaignDialogContentComponent } from '@k-core/modules/app-base/components/campaign-dialog/cmp.campaign-dialog'


// Modules
import { LayoutModule }             	from '@k-core/modules/layout/mod.layout'
import { SharedModule }             	from '@k-core/modules/shared/mod.shared'
import { LanguageModule }				from '@k-core/modules/language/mod.language'
import { StoredropdownModule } 			from '@k-core/modules/storeDropdown/mod.storeDropdown'
import { ProductModule } 				from '@k-core/modules/product/mod.product'

// Views
import { FrontpageView }				from '@k-core/views/core/frontpage/view.frontpage'
import { SuccessPageView }				from '@k-core/views/layout/success-page/view.success-page'
import { CartSentView }         		from '@k-core/views/layout/cart-sent/view.cart-sent'
import { BasketHelperService } from '@k-core/modules/basket/services/svc.basket-helper'

// Services


// Material
import { MatDialogModule, MAT_DIALOG_DEFAULT_OPTIONS } 	from '@angular/material'
import { MatIconModule }                				from '@angular/material/icon'


// Partial Modules -- COMMON Modules
import { CommonDiscountServices } 		from '@k-common/discount/com.discount-services'
import { BasketPartialModule } 			from '@k-core/modules/basket-partial/mod.basket-partial'
import { CommonCollectionGeneralServicesModule } from '@k-core/common/collections/com.generalServices'


import localeDa from '@angular/common/locales/da'
import { BasketService } from '@k-core/services/svc.basket'
import { PlatoConfiguratorService } from '@k-core/services/svc.plato-configurator'
import { GoogleApisService } from '@k-core/services/svc.googleApis'
import { ActiveCartService } from '@k-core/services/active-cart.service'
registerLocaleData(localeDa, 'da')



// Enable when ready.. 
enableProdMode();

@NgModule({
	declarations: [
		// Components
		AppBauhausComponent,
		BreadCrumbsComponent,
		PrivacyPageComponent,
		CampaignDialogComponent,
		CampaignDialogContentComponent,
		BusCampignDialogComponent,
		
		// Views
		FrontpageView,
		SuccessPageView,
		CartSentView,
	],
	imports: [
		SharedModule,
		CommonModule,
		FormsModule,
		HttpClientModule, // New hotness
		
		// Material
		MatDialogModule,
		MatIconModule,

		// Routing, must be before Eagerly loaded modules
		AppRoutingModule, // Must be at top of Custom modules!

		CommonDiscountServices,
		CommonCollectionGeneralServicesModule,
		
		// Partial Modules
		BasketPartialModule,
		StoredropdownModule,
		MenuBauhausModule,
		HeaderModule,
		FooterModule,
		LanguageModule,
		ProductModule,
		LayoutModule,
		BlockModule,

	],
	exports: [
	],
	entryComponents: [
        CampaignDialogContentComponent,
		BusCampignDialogComponent
    ],
	providers: [
		BasketService,
		BasketHelperService,
		GoogleApisService,
		ActiveCartService,
		PlatoConfiguratorService,
		{ provide: LOCALE_ID, useValue: 'da-DK' },
		{ provide: MAT_DIALOG_DEFAULT_OPTIONS, useValue: {hasBackdrop: true} }
	]
})
export class AppModule { }
