export const fontStyleAdv = (options) => {
  class fontStyleAdvOption {
    // 唯一的 参数 键. 如果重复 后面的将覆盖前面的
    name = 'fontStyle';
    isInput = false;
    fontStyleList = [];

    constructor(options) {
      this.isInput = options.isInput || false;
      this.fontStyleList = options.fontStyleList || [];
    }

    target = null;
    // 涉及修改元素样式， 添加一个 css 方法
    css(t, e) {
      if (t && t.length) {
        if (e) return t.css("font-style", e);
        return "font-style:" + e;
      }
      return null;
    }
    createTarget(printElement, options, printElementType) {
      const input = `<input type="number" class="auto-submit"/>`;
      const select = `<select class="auto-submit"></select>`;
      this.target = $(`
      <div class="hiprint-option-item hiprint-option-item-row">
        <div class="hiprint-option-item-label">字形</div>
        <div class="hiprint-option-item-field">
          ${ this.isInput ? input : select }
        </div>
      </div>
    `);
      // 不是输入框, 就插入 select option
      if (!this.isInput) {
        let fontStyleList = '<option value="" >默认</option>';
        this.fontStyleList.forEach(function(e) {
          fontStyleList += '<option value="' + e.fontStyle + '">' + e.fontStyleName + '</option>';
        });
        this.target.find('.auto-submit').append($(fontStyleList));
      }
      // 别忘了 getValue, setValue, 也需要做对应调整
      return this.target;
    }

    // 获取这个参数的 值
    getValue() {
      var t = '';
      if (this.isInput) {
        t = this.target.find('input').val();
      } else {
        t = this.target.find('select').val();
      }
      return t;
    }

    // 设置这个参数的 值
    setValue(t) {
      if (this.isInput) {
        return t && this.target.find('input').val(t);
      }
      t && (this.target.find('option[value="' + t + '"]').length || this.target.find('select').prepend('<option value="' + t + '" >' + t + '</option>'));
      this.target.find('select').val(t);
    }

    // 销毁这个参数 (比如点击其他元素的时候，移除这个 DOM)
    destroy() {
      this.target.remove();
    }
  }

  return function () { 
    return new fontStyleAdvOption(options) 
  };
};