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

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


// ---- External pacakges ---- \\
import { CookieService } from 'ng2-cookies'

// ---- Components ---- \\
// Core
// import { AppComponent }					from '@k-core/modules/app-base/components/app/cmp.app'
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'

// Site
import { AppBilkaComponent }			from './components/app/cmp.app'


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


// ---- Modules ---- \\
// Core
import { SharedModule }             	from '@k-core/modules/shared/mod.shared'
// import { MenuModule }					from '@k-core/modules/menu/mod.menu'
import { LayoutModule }             	from '@k-core/modules/layout/mod.layout'
import { B2B_MenuModule } 				from '@k-sites/b2b/modules/menu/mod.menu'
import { B2B_BlockModule }				from '@k-sites/b2b/modules/block/mod.block'
import { LanguageModule }				from '@k-core/modules/language/mod.language'
import { StoredropdownModule } 			from '@k-core/modules/storeDropdown/mod.storeDropdown'

// Site
import { FooterModule }					from '@k-sites/b2b/modules/footer/mod.footer'
import { HeaderModule }					from '@k-sites/b2b/modules/header/mod.header'


// ---- Routes ---- \\
import { AppRoutingModule }         	from './rte.app'


// ---- Services ---- \\
import { SharedService }            	from '@k-services/svc.shared'
import { MenuService }         			from '@k-services/svc.menu'
import { HelperService }            	from '@k-services/svc.helper'
import { SeoService }               	from '@k-services/svc.seo'
import { CacheService }					from '@k-services/general/svc.cache'
import { BasketService } 				from '@k-core/services/svc.basket'
import { UserService } 					from '@k-core/modules/User/services/svc.user' // Should be moved


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

// Lazy services
import { ConfiguratorService } from '@k-core/modules/configurator/services/svc.configurator'
import { ProductService } from '@k-services/svc.product'
import { BasketHelperService } from '@k-core/modules/basket/services/svc.basket-helper'

// ---- Guard ---- \\
import { UserGuard }                   from '@k-core/guards/guard.User'

// 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 { PlatoConfiguratorService } from '@k-core/services/svc.plato-configurator'
import localeSe from '@angular/common/locales/se-SE'
import { BusCampignDialogComponent } from '@k-core/modules/app-base/components/campaign-dialog/cmp.campaign-dialog'
import { GoogleApisService } from '@k-core/services/svc.googleApis'
import { ActiveCartService } from '@k-core/services/active-cart.service'
registerLocaleData(localeSe, 'se-SE')
// enableProdMode();


@NgModule({
	declarations: [
		// Components
		// AppComponent,
		AppBilkaComponent,
		BreadCrumbsComponent,
		//BasketComponent,
		PrivacyPageComponent,
		
		// Views - TODO: Make these lazyloadable
		PrivacyPageComponent,
		FrontpageView,
		SuccessPageView,
		CartSentView,
		BusCampignDialogComponent
		
	],
	imports: [
		// Angular modules
		SharedModule,
		CommonModule,
		FormsModule,
		HttpClientModule,
		PortalModule,

		// Material
		MatDialogModule,
		MatIconModule,

		// Custom Modules

		HeaderModule, // Template Header
		B2B_MenuModule, // Template Menu
		FooterModule, // Template footer

		LanguageModule, // Provider of exports
		StoredropdownModule, // Provider of exports
		B2B_BlockModule, // Provider of exports

		LayoutModule, // Refactor away
		
		AppRoutingModule,
		CommonDiscountServices,
		BasketPartialModule,
		CommonCollectionGeneralServicesModule,
	],
	exports: [
	],
	providers: [
		{ provide: LOCALE_ID, useValue: 'se-SE' },
		{ provide: MAT_DIALOG_DEFAULT_OPTIONS, useValue: {hasBackdrop: true} },

		// Services
		SharedService,
		MenuService, 
		HelperService,
		SeoService,
		CacheService,
		CookieService,
		UserService,
		GoogleApisService,

		// Required for Lazyloads
		ConfiguratorService,
		ProductService,
		BasketService,
		ActiveCartService,
		BasketHelperService,
		PlatoConfiguratorService,

		// Guards
		UserGuard
	]
})
export class AppModule {}
