import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';

import { BixiTimeModule } from '@bixi/core/time';
import { NzDividerModule } from 'ng-zorro-antd/divider';
import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
import { NzIconModule } from 'ng-zorro-antd/icon';
import { NzProgressModule } from 'ng-zorro-antd/progress';
import { NzTableModule } from 'ng-zorro-antd/table';
import { NzToolTipModule } from 'ng-zorro-antd/tooltip';
import { BixiRowDirective } from './cols/row.directive';
import { BixiTableUtilsService } from './table-utils.service';
import { BixiTableComponent } from './table.component';
import { BixiTableService } from './table.service';

import { BixiTableColLinkComponent } from './cols/col-link.component';
import { BixiOperationsGroupComponent } from './cols/col-operations-group.component';
import { ColOperationsTemplateComponent } from './cols/col-operations-template.component';
import { BixiTableColOperationsComponent } from './cols/col-operations.component';
import { BixiTableColProgressComponent } from './cols/col-progress.component';
import { BixiTableColStatusComponent } from './cols/col-status.component';
import { ColStatusService } from './cols/col-status.service';
import { BixiTableColTemplateComponent } from './cols/col-template.component';

import { ColTemplateService } from './cols/col-template.service';
import { BixiTableColTextComponent } from './cols/col-text.component';
import { BixiTableColTimeComponent } from './cols/col-time.component';

import { BixiI18nModule } from '@bixi/core/i18n';
import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';
import { BixiTableColCheckboxComponent } from './cols/col-checkbox.component';
import { BixiTableColTemplateHeaderComponent } from './cols/col-template-header.component';

const ZORRO_MODULES = [NzProgressModule, NzDropDownModule, NzIconModule, NzDividerModule, NzTableModule, NzToolTipModule, NzCheckboxModule];

const COMPONENTS = [
  BixiTableColTimeComponent,
  BixiTableColLinkComponent,
  BixiTableColTextComponent,
  BixiTableColStatusComponent,
  BixiTableColProgressComponent,
  BixiTableColTemplateComponent,
  BixiTableColOperationsComponent,
  BixiOperationsGroupComponent,
  ColOperationsTemplateComponent,
  BixiTableColCheckboxComponent,
  BixiTableColTemplateHeaderComponent
];

const DIRECTIVES = [BixiRowDirective];

const SERVICES = [ColTemplateService, BixiTableService, BixiTableUtilsService, ColStatusService];

@NgModule({
  imports: [CommonModule, BixiTimeModule, ...ZORRO_MODULES, BixiI18nModule],
  declarations: [BixiTableComponent, ...COMPONENTS, ...DIRECTIVES],
  providers: [...SERVICES],
  exports: [BixiTableComponent, ...DIRECTIVES]
})
export class BixiTableModule { }
