import { OverlayModule } from '@angular/cdk/overlay';
import { CommonModule } from '@angular/common';
import { ModuleWithProviders, NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';

// Компоненты
import {
	CrmBreadCrumbsComponent,
	CrmButtonComponent,
	CrmCalendarComponent,
	CrmCheckboxComponent,
	CrmContextMenuComponent,
	CrmCursorComponent,
	CrmDatepickerComponent,
	CrmDatepickerPopupComponent,
	CrmInputComponent,
	CrmLoaderComponent,
	CrmPowerSelectComponent,
	CrmPowerSelectGroupPopupComponent,
	CrmPowerSelectPopupComponent,
	CrmPowerSelectTreePopupComponent,
	CrmScrollComponent,
	CrmSliderComponent,
	CrmSpinerComponent,
	CrmSvgSpriteComponent,
	CrmTableCellComponent,
	CrmTableComponent,
	CrmTableContentComponent,
	CrmTableDefaultCellComponent,
	CrmTableFooterComponent,
	CrmTableHeaderComponent,
	CrmTabsComponent,
	CrmTreeComponent,
	CrmTreeNodeComponent
} from './components';

// Директивы
import {
	CrmDateMaskDirective,
	CrmPhoneMaskDirective,
	CrmViewContainerDirective,
} from './directives';

// Сервисы
import {
	CrmContextMenuOverlayService,
	CrmHelperService
} from './services';

// Модуль интерфейса приложения UI-Kit
@NgModule({
	imports: [
		CommonModule,
		FormsModule,
		ReactiveFormsModule,
		OverlayModule,
	],
	declarations: [
		CrmBreadCrumbsComponent,
		CrmButtonComponent,
		CrmCalendarComponent,
		CrmCheckboxComponent,
		CrmContextMenuComponent,
		CrmCursorComponent,
		CrmDatepickerComponent,
		CrmDatepickerPopupComponent,
		CrmInputComponent,
		CrmLoaderComponent,
		CrmPowerSelectComponent,
		CrmPowerSelectGroupPopupComponent,
		CrmPowerSelectPopupComponent,
		CrmPowerSelectTreePopupComponent,
		CrmScrollComponent,
		CrmSliderComponent,
		CrmSpinerComponent,
		CrmSvgSpriteComponent,
		CrmTableCellComponent,
		CrmTableComponent,
		CrmTableContentComponent,
		CrmTableDefaultCellComponent,
		CrmTableFooterComponent,
		CrmTableHeaderComponent,
		CrmTabsComponent,
		CrmTreeComponent,
		CrmTreeNodeComponent,
		CrmDateMaskDirective,
		CrmViewContainerDirective,
		CrmPhoneMaskDirective
	],
	exports: [
		CrmBreadCrumbsComponent,
		CrmButtonComponent,
		CrmCalendarComponent,
		CrmCheckboxComponent,
		CrmContextMenuComponent,
		CrmCursorComponent,
		CrmDatepickerComponent,
		CrmInputComponent,
		CrmLoaderComponent,
		CrmPowerSelectComponent,
		CrmScrollComponent,
		CrmSliderComponent,
		CrmSpinerComponent,
		CrmSvgSpriteComponent,
		CrmTableComponent,
		CrmTabsComponent,
		CrmTreeComponent,
		CrmDateMaskDirective,
		CrmViewContainerDirective,
		OverlayModule,
		CrmPhoneMaskDirective
	],
	entryComponents: [
		CrmContextMenuComponent,
		CrmDatepickerPopupComponent,
		CrmPowerSelectGroupPopupComponent,
		CrmPowerSelectPopupComponent,
		CrmPowerSelectTreePopupComponent,
		CrmTableDefaultCellComponent
	]
})
export class GpCrmUiModule {
	public static forRoot(): ModuleWithProviders {
		return {
			ngModule: GpCrmUiModule,
			providers: [
				CrmContextMenuOverlayService,
				CrmHelperService
			]
		};
	}
}
