import type { FormRule } from "antd";
/**
 * @description 验证表编码
 */
export const validateTableCode: FormRule = {
  validateTrigger: ["onChange", "onBlur"],
  validator: (
    _rule: any,
    value: string,
  ): Promise<void> | void => {
    // 小写字母开头，可以有数字，下划线，字母，且必须包含下划线
    const regex = /^[a-z][a-z0-9_]*_[a-zA-Z0-9_]*$/;
    if (value.length >= 50) {
      return Promise.reject(new Error("编码长度不能超过50"));
    }
    if (!regex.test(value)) {
      return Promise.reject(new Error("编码只能包含字母、下划线、数字, 必须小写字母开头，且必须有下划线！"));
    }
    return Promise.resolve();
  },
};

/**
 * @description 验证字段编码
 */
export const validateColumnCode: FormRule = {
  validateTrigger: ["onChange", "onBlur"],
  validator: (
    _rule: any,
    value: string,
  ): Promise<void> | void => {
    // 小写字母开头，可以有数字，下划线，字母，且必须包含下划线
    const regex = /^[a-z][a-z0-9_]*$/;
    if (value.length >= 50) {
      return Promise.reject(new Error("编码长度不能超过50"));
    }
    if (!regex.test(value)) {
      return Promise.reject(new Error("编码只能包含字母和数字, 必须小写字母开头！"));
    }
    return Promise.resolve();
  },
};

/**
 * @description 校验别名
 */
export const validateAliasName: FormRule = {
  validateTrigger: ["onChange", "onBlur"],
  validator: (
    _rule: any,
    value: string,
  ): Promise<void> | void => {
    // 小写字母开头，可以有数字，下划线，字母，且必须包含下划线
    const regex = /^[a-z][a-zA-Z0-9_]*$/;
    if (value.length >= 50) {
      return Promise.reject(new Error("别名长度不能超过50"));
    }
    if (!regex.test(value)) {
      return Promise.reject(new Error("别名只能包含字母和数字, 必须小写字母开头！"));
    }
    return Promise.resolve();
  },
};