import { FieldRule } from '@arco-design/web-vue/es/form';

export const username: FieldRule[] = [
  {
    required: true,
    match: /^[a-zA-Z0-9][a-zA-Z0-9_]{2,19}$/,
    message: '用户名必须以字母或数字开头，长度为3-20位，允许字母数字下划线',
  },
];

export const password: FieldRule[] = [
  {
    required: true,
    match: /^[a-zA-Z0-9_]{6,20}$/,
    message: '密码只能由数字、字母和下划线组成，长度6-20个字符',
  },
];

export const phone: FieldRule[] = [
  {
    required: true,
    match: /^1\d{10}$/,
    message: '请输入合适的手机号码',
  },
];

export const smscode: FieldRule[] = [
  {
    required: true,
    match: /^[a-zA-Z0-9]{4}$/,
    message: '请输入4位短信验证码',
  },
];

export const strictPassword: FieldRule[] = [
  {
    required: true,
    validator: (value, callback) => {
      if (!value) {
        return callback(`请输入密码`);
      }
      // // 禁止使用相同的数字或字符作为密码
      // const reg2 = /^[a-zA-Z0-9].+$/;
      // const vals = new Set(value.split(""));
      // if (reg2.test(value) && vals.size === 1) {
      //   return callback(`禁止使用相同的数字或字符作为密码`);
      // }
      // // 禁止使用连续升序或降序的数字或字母作为密码
      // const valCharCodes = value.split("").map((item) => item.charCodeAt());
      // let intervals = [];
      // for (let i = 0; i < valCharCodes.length; i++) {
      //   const element = valCharCodes[i];
      //   if (i === 0) continue;
      //   intervals.push(element - valCharCodes[i - 1]);
      // }
      // const interVals = Array.from(new Set(intervals));
      // if (
      //   reg2.test(value) &&
      //   interVals.length === 1 &&
      //   Math.abs(interVals[0]) === 1
      // ) {
      //   return callback(
      //     `禁止使用连续升序或降序的数字或字母作为密码`
      //   );
      // }
      // 密码应至少包含数字、大小写字母及特殊宇符中的两种；
      const reg1 =
        /^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)(?![!@#$%^&*]+$)[\da-zA-Z!@#$%^&*]{8,20}$/g;
      if (!reg1.test(value)) {
        return callback(
          `密码应至少包含数字、大小写字母及特殊宇符(!@#$%^&*)中的两种，长度8-20位`
        );
      }

      return callback();
    },
  },
];
