import { constants } from "node:fs";
import { access, stat } from "node:fs/promises";
import path from "node:path";

export class LocalFolderValidationError extends Error {
  constructor(message: string) {
    super(message);
    this.name = "LocalFolderValidationError";
  }
}

export async function validateLocalFolderPath(inputPath: string) {
  const trimmedPath = inputPath.trim();

  if (!trimmedPath) {
    throw new LocalFolderValidationError("Укажи путь к локальной папке проекта.");
  }

  if (!path.isAbsolute(trimmedPath)) {
    throw new LocalFolderValidationError("Путь к локальной папке должен быть абсолютным.");
  }

  const resolvedPath = path.resolve(trimmedPath);

  let stats;
  try {
    stats = await stat(resolvedPath);
  } catch {
    throw new LocalFolderValidationError("Такой папки не существует или сервер не может её прочитать.");
  }

  if (!stats.isDirectory()) {
    throw new LocalFolderValidationError("Указанный путь должен вести именно к папке, а не к файлу.");
  }

  try {
    await access(resolvedPath, constants.R_OK);
  } catch {
    throw new LocalFolderValidationError("У сервера нет прав на чтение этой папки.");
  }

  return resolvedPath;
}
