/// <reference path="./definition.d.ts" />
/// <reference path="../util/validate/definition.d.ts" />

import { regexp } from '../util/validate';

class FormCore {
  constructor(params: TspComponentFormCoreParams) {
    this.elem = params.elem;

    if (params.required) {
      this.setRequired(params.required);
    }
    if (params.patternType || params.pattern) {
      this.setPattern({
        pattern: params.pattern,
        patternType: params.patternType,
        patternTrigger: params.patternTrigger,
        patternMsg: params.patternMsg,
      });
    }
    this.setValue(params.defaultValue);
  }

  public elem: HTMLElement;

  /**
   * 设置必填属性
   */
  public setRequired(required: string): void {
    this.elem.dataset.required = 'true';
    this.elem.dataset.requiredMsg = required;
  }

  /**
   * 设置验证规则
   */
  public setPattern(params: TspComponentFormCoreSetPatternParams): void {
    const { pattern, patternType, patternTrigger, patternMsg } = params;
    if (pattern) {
      this.elem.dataset.pattern = pattern.toString();
    } else {
      this.elem.dataset.pattern = regexp[patternType].toString();
      this.elem.dataset.patternType = patternType;
    }
    if (patternTrigger) {
      this.elem.dataset.patternTrigger = patternTrigger.toString();
    }
    if (patternMsg) {
      this.elem.dataset.patternMsg = patternMsg;
    }
  }

  /**
   * 设置data-index
   */
  public setValue(value: string | number): void {
    this.elem.dataset.value = value ? value.toString() : '';
  }
}

export default FormCore;