/**
 * 密码强度规则
 * 根据参数 chrtype 动态生成校验规则
 *
 * chrtype 说明：
 *   0 - 任意字符（默认）
 *   1 - 纯数字（0-9）
 *   2 - 纯字母（a-z / A-Z）
 *   3 - 字母 + 数字（必须同时包含）
 *   4 - 字母 + 数字 + 特殊字符（必须同时包含，特殊字符：~!@#$%^&*()-=_+）
 */
import cache from '@/plugins/cache'

// 各类型对应的正则、错误提示
const PWD_RULES = {
  '0': { pattern: /^[^<>"'|\\]+$/, message: '密码不能包含非法字符：< > " \' \\ |' },
  '1': { pattern: /^[0-9]+$/, message: '密码只能为数字（0-9）' },
  '2': { pattern: /^[a-zA-Z]+$/, message: '密码只能为英文字母（a-z、A-Z）' },
  '3': { pattern: /^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]+$/, message: '密码必须同时包含字母和数字' },
  '4': { pattern: /^(?=.*[A-Za-z])(?=.*\d)(?=.*[~!@#$%^&*()\-=_+])[A-Za-z\d~!@#$%^&*()\-=_+]+$/, message: '密码必须同时包含字母、数字和特殊字符（~!@#$%^&*()-=_+）' }
}

export default {
  data() {
    return {
      // 密码限制类型
      pwdChrType: cache.session.get('pwrChrtype') || '0'
    }
  },
  computed: {
    // 默认密码校验
    pwdValidator() {
      const rule = PWD_RULES[this.pwdChrType] || PWD_RULES['0']
      return [
        { required: true, message: '密码不能为空', trigger: 'blur' },
        { min: 6, max: 20, message: '密码长度必须介于 6 和 20 之间', trigger: 'blur' },
        { pattern: rule.pattern, message: rule.message, trigger: 'blur' }
      ]
    },
    // 校验prompt的inputValidator函数
    pwdPromptValidator() {
      const rule = PWD_RULES['0']
      return (value) => {
        if (!value || value.length < 6 || value.length > 20) {
          return '密码长度必须介于 6 和 20 之间'
        }
        if (!rule.pattern.test(value)) {
          return rule.message
        }
      }
    },
    // 个人中心密码校验
    infoPwdValidator() {
      const rule = PWD_RULES[this.pwdChrType] || PWD_RULES['0']
      return [
        { required: true, message: '新密码不能为空', trigger: 'blur' },
        { min: 6, max: 20, message: '新密码长度必须介于 6 和 20 之间', trigger: 'blur' },
        { pattern: rule.pattern, message: rule.message, trigger: 'blur' }
      ]
    },
    // 注册页面密码校验
    registerPwdValidator() {
      const rule = PWD_RULES['0']
      return [
        { required: true, message: '请输入您的密码', trigger: 'blur' },
        { min: 6, max: 20, message: '用户密码长度必须介于 6 和 20 之间', trigger: 'blur' },
        { pattern: rule.pattern, message: rule.message, trigger: 'blur' }
      ]
    }
  }
}
