/**
 * 验证器工具函数
 */

/**
 * 创建带前缀的应用标识符验证器
 * 用于验证设置项的键格式
 */
export var createPrefixedAppIdentifierValidator = function createPrefixedAppIdentifierValidator(sectionCode) {
  return function (_, value) {
    if (!value) {
      return Promise.resolve();
    }

    // 检查是否以section code开头
    var expectedPrefix = "".concat(sectionCode, ".");
    if (!value.startsWith(expectedPrefix)) {
      return Promise.reject(new Error("\u952E\u5FC5\u987B\u4EE5 \"".concat(expectedPrefix, "\" \u5F00\u5934")));
    }

    // 检查剩余部分的格式
    var remainingPart = value.substring(expectedPrefix.length);
    if (!remainingPart) {
      return Promise.reject(new Error('键不能只包含前缀'));
    }

    // 验证格式：只能包含小写字母、数字、点、下划线
    var validPattern = /^[a-z0-9._]+$/;
    if (!validPattern.test(remainingPart)) {
      return Promise.reject(new Error('键只能包含小写字母、数字、点、下划线'));
    }

    // 不能以点或下划线开头或结尾
    if (remainingPart.startsWith('.') || remainingPart.startsWith('_') || remainingPart.endsWith('.') || remainingPart.endsWith('_')) {
      return Promise.reject(new Error('键不能以点或下划线开头或结尾'));
    }

    // 不能包含连续的点或下划线
    if (remainingPart.includes('..') || remainingPart.includes('__') || remainingPart.includes('._') || remainingPart.includes('_.')) {
      return Promise.reject(new Error('键不能包含连续的点或下划线'));
    }
    return Promise.resolve();
  };
};