export const K1_PROJECT_NAME_MAX_LENGTH = 96;

export interface ProjectNameValidation {
  value: string;
  error: string | null;
}

const CONTROL_CHARACTER_OR_SURROGATE = /[\p{Cc}\p{Cs}]/u;

export function normalizeProjectName(input: string): string {
  return input.normalize("NFKC").trim();
}

export function validateProjectName(input: string): ProjectNameValidation {
  const value = normalizeProjectName(input);
  if (!value) {
    return { value, error: "Введите название проекта." };
  }
  if (CONTROL_CHARACTER_OR_SURROGATE.test(value)) {
    return {
      value,
      error: "Название проекта не должно содержать управляющие символы.",
    };
  }
  if (Array.from(value).length > K1_PROJECT_NAME_MAX_LENGTH) {
    return {
      value,
      error: `Название проекта должно быть не длиннее ${K1_PROJECT_NAME_MAX_LENGTH} символов.`,
    };
  }
  return { value, error: null };
}
