import { Inject, Injectable, Optional } from '@angular/core';
import { get, has, isString } from '@bixi/core/utils';
import { NzSafeAny } from 'ng-zorro-antd/core/types';
import { BIXI_TABLE_CONFIG } from '../table.token';
import { IBixiTableConfig, IBixiTableStatusConfig, IBixiTableStatusConfigCustom } from '../table.type';

@Injectable()
export class ColStatusService {
  defaultStatus: NzSafeAny = {
    // green
    'success': {
      text: '已完成',
      class: 'bixi-col-success-status'
    },
    // blue
    'processing': {
      text: '正在执行',
      class: 'bixi-col-processing-status'
    },
    // red
    'error': {
      text: '异常',
      class: 'bixi-col-error-status'
    },
    // default
    'default': {
      text: '等待执行',
      class: 'bixi-col-default-status'
    },
    // orange
    'stop': {
      text: '已终止',
      class: 'bixi-col-stop-status'
    }
  };

  constructor(@Optional() @Inject(BIXI_TABLE_CONFIG) private bixiTableConfig: IBixiTableConfig) {
  }

  mergeTableConfig() {
    const statusConfig = get(this.bixiTableConfig, 'status', {} as IBixiTableStatusConfig);
    for (const key in statusConfig) {
      if (has(statusConfig, key)) {
        const val = statusConfig[key];
        if (isString(val)) {
          // 默认内置 status
          this.defaultStatus[key] = { ...this.defaultStatus[val as string] };
        } else {
          const value = val as IBixiTableStatusConfigCustom;
          // 自定义 status
          if (value.className) {
            // 包含 className
            this.defaultStatus[key] = {
              class: value.className,
              text: value.text
            };
          }
          if (value.style) {
            // 包含 style
            this.defaultStatus[key] = {
              class: 'status',
              text: value.text,
              style: value.style
            };
          }
        }
      }
    }
  }
}
