// NG Imports
import { NgModule } from '@angular/core'
import { HTTP_INTERCEPTORS } from '@angular/common/http'

// Services
import { CookieService } from 'ng2-cookies'
import { RequestCacheWithMap } from '@k-core/services/general/svc.requestCache'
import { SharedService } from '@k-core/services/svc.shared'
import { MenuService } from '@k-core/services/svc.menu'
import { HelperService } from '@k-core/services/svc.helper'
import { SeoService } from '@k-core/services/svc.seo'
import { CacheService } from '@k-core/services/general/svc.cache'
import { EcommerceTrackingService } from '@k-core/services/general/tracking'
import { BlockService } from '@k-core/modules/block/services/svc.block'

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

// Getters
import { CheckFactory } from '@k-core/services/factories/fac.check'

// Setters
/* No setters yet */

// Interceptors
import { CacheInterceptor } from '@k-core/interceptors/int.cacheInterceptor'

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

// Pipes
import { TranslatePipe } from '@k-core/pipes/pipe.translate'

// Commons

/**
 * @name CommonCollectionGeneralServicesModule
 * @description Collection of general services
 * @author Kasper Hansen - Klean
 * @since Wed Oct 02 2019
 * 
 */

let PROVIDERS = [
    {
        provide: HTTP_INTERCEPTORS,
        useClass: CacheInterceptor,
        multi: true
    },
    
    RequestCacheWithMap,
    CheckFactory,

    CookieService,
    SharedService,
    MenuService, 
    HelperService,
    SeoService,
    CacheService,
    EcommerceTrackingService,

    // Core services
    BlockService,

    // Pipes
    TranslatePipe,

    // Guards
    UserGuard,

    // Lazyloadable services
    ConfiguratorService,
    ProductService
]

@NgModule({
    providers: [
        ...PROVIDERS
    ]
})
export class CommonCollectionGeneralServicesModule { }