///|
fn valid_logical_path(path : String) -> Bool {
  if !path.has_prefix("/") {
    return false
  }
  for part in path.split("/") {
    if part == "." || part == ".." {
      return false
    }
  }
  true
}

///|
async fn main {
  let args = @env.args()[1:]
  let parsed = @cli.parse(args, [
    @cli.flag("logical", short='L'),
    @cli.flag("physical", short='P'),
    @cli.flag("help"),
  ]) catch {
    @cli.CliError(option~, message~, ..) => {
      @stdio.stderr.write("pwd: \{message}: '\{option}'\n")
      @sys.exit(2)
      return
    }
  }
  if parsed.contains("help") {
    @stdio.stdout.write("Usage: pwd [-L|-P]\n")
    return
  }
  if !parsed.operands.is_empty() {
    @stdio.stderr.write("pwd: unexpected operand: '\{parsed.operands[0]}'\n")
    @sys.exit(2)
    return
  }
  let logical = parsed.last_occurrence(["logical", "physical"]) !=
    Some("physical")
  guard @env.current_dir() is Some(current) else {
    @stdio.stderr.write("pwd: cannot determine current directory\n")
    @sys.exit(1)
    return
  }
  let selected = if logical {
    match @env.get_env_var("PWD") {
      Some(path) if valid_logical_path(path) => path
      _ => current
    }
  } else {
    @fs.realpath(current) catch {
      err => {
        @stdio.stderr.write("pwd: \{err}\n")
        @sys.exit(1)
        return
      }
    }
  }
  @stdio.stdout.write(selected + "\n")
}