const regexp = {
  /** 空格 */
  space: /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
  /** 数字 */
  number: /^\d+$/,
  /** 大写，小写，数字及特殊字符 */
  char: /((?=[\x21-\x7e]+)[^A-Za-z0-9])/,
  /** 姓名 */
  name: /^[\u4e00-\u9fa5]{1,20}$/,
  /** 手机号 */
  // tel: /^((1[3,5,7,8][0-9])|(14[5,7])|(17[0,6,7,8]))\d{8}$/,
  tel: /^(1\d{2}|852|853|832)\d{8}$|^886\d{9,10}$/,
  /** 座机号 */
  landline: /^((0\d{2,3})-)(\d{7,8})(-(\d{1,3}))?$/,
  /** 金额 */
  price: /^[0-9]+(.[0-9]{1,2})?$/,
  /** 正数 */
  integer: /^(-|\+)?\d+$/,
  /** 身份证号 */
  // tslint:disable-next-line:max-line-length
  cardId: /^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\d{4}((19\d{2}(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(19\d{2}(0[13578]|1[02])31)|(19\d{2}02(0[1-9]|1\d|2[0-8]))|(19([13579][26]|[2468][048]|0[48])0229))\d{3}(\d|X|x)?$/,
  /** emoji */
  emoji: /\ud83c[\udf00-\udfff]|\ud83d[\udc00-\ude4f]|\ud83d[\ude80-\udeff]/g
};

const errorStyle = 'tsp-component-Input-error';

/**
 * 验证是否必填
 */
function validateRequried(formControlElem: HTMLElement, callback?: (msg: string, elem: HTMLElement) => void): boolean {
  const dataset = formControlElem.dataset;
  if (dataset.required) {
    if (dataset.value) {
      return true;
    } else {
      if (callback) {
        callback(dataset.requiredMsg, formControlElem);
      }
      return false;
    }
  } else {
    return true;
  }
}

/**
 * 验证是否验证规则
 */
function validatePattern(formControlElem: HTMLElement, callback?: (msg: string, elem: HTMLElement) => void): boolean {
  const dataset = formControlElem.dataset;
  let regex;
  let flag = true;
  let msg = dataset.patternMsg;
  let result;

  if (!dataset.value) {
    return true;
  }
  if (dataset.pattern) {
    regex = new RegExp(eval(dataset.pattern));
    switch (dataset.patternType) {
      case 'space':
      case 'char':
      //case 'landline':
        flag = regex.test(dataset.value) === false; break;
      default: flag = regex.test(dataset.value).toString() === dataset.patternTrigger; break;
    }
    switch (dataset.patternType) {
      case 'space': msg = msg || '不能输入空格'; break;
      case 'number': msg = msg || '只能输入数字'; break;
      case 'char': msg = msg || '不能输入非法字符'; break;
      case 'name': msg = msg || '名字中不能包含特殊字符'; break;
      case 'tel': msg = msg || '请输入正确的手机号'; break;
      case 'landline': msg = msg || '请输入正确的座机号'; break;
      case 'price': msg = msg || '请填写正确的金额（最多2位小数）'; break;
      case 'integer': msg = msg || '请填写整数'; break;
      case 'landline': msg = msg || '请输入正确的座机号'; break;
      case 'cardId': msg = msg || '请输入正确的身份证号'; break;
      default: break;
    }
    if (flag) {
      result = true;
    } else {
      if (callback) {
        callback(msg, formControlElem);
      }
      result = false;
    }
  } else {
    result = true;
  }
  if (result) {
    formControlElem.classList.remove(errorStyle);
  } else {
    formControlElem.classList.add(errorStyle);
  }

  return result;
}

export { regexp, validateRequried, validatePattern } ;