/**
 * Helper functions that implement "directory" functionality in the Terminal.
 * These aren't "real" directories, it's more of a pseudo-directory implementation
 * that uses mainly string manipulation.
 *
 * This file contains function that deal with Server-related directory things.
 * Functions that deal with the string manipulation can be found in
 * ./DirectoryHelpers.ts
 */
import { isValidDirectoryPath, isInRootDirectory, getFirstParentDirectory } from "./DirectoryHelpers";
import { BaseServer } from "../Server/BaseServer";

/**
 * Given a directory (by the full directory path) and a server, returns all
 * subdirectories of that directory. This is only for FIRST-LEVEl/immediate subdirectories
 */
export function getSubdirectories(serv: BaseServer, dir: string): string[] {
  const res: string[] = [];

  if (!isValidDirectoryPath(dir)) {
    return res;
  }

  let t_dir = dir;
  if (!t_dir.endsWith("/")) {
    t_dir += "/";
  }

  function processFile(fn: string): void {
    if (t_dir === "/" && isInRootDirectory(fn)) {
      const subdir = getFirstParentDirectory(fn);
      if (subdir !== "/" && !res.includes(subdir)) {
        res.push(subdir);
      }
    } else if (fn.startsWith(t_dir)) {
      const remaining = fn.slice(t_dir.length);
      const subdir = getFirstParentDirectory(remaining);
      if (subdir !== "/" && !res.includes(subdir)) {
        res.push(subdir);
      }
    }
  }

  for (const script of serv.scripts) {
    processFile(script.filename);
  }

  for (const txt of serv.textFiles) {
    processFile(txt.fn);
  }

  return res;
}
