// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

[DartPackage="mojo_services"]
module mojo.files;

import "files/interfaces/file.mojom";
import "files/interfaces/types.mojom";

// This interface provides access to a directory in a "file system", providing
// operations such as creating/opening/removing/renaming files/directories
// within it. Note that all relative |path| arguments are relative to "this"
// directory (i.e., "this" directory functions as the current working directory
// for the various operations).
// TODO(vtl): Paths may be relative; should they allowed to be absolute?
// (Currently not.)
interface Directory {
  // Operations about "this" |Directory|:

  // Reads the contents of this directory.
  // TODO(vtl): Clarify error codes versus |directory_contents|.
  Read() => (Error error, array<DirectoryEntry>? directory_contents);

  // Gets information about this directory. On success, |file_information| is
  // non-null and will contain this information.
  Stat() => (Error error, FileInformation? file_information);

  // Updates this directory's atime and/or mtime to the time specified by
  // |atime| (or |mtime|, respectively), which may also indicate "now". If
  // |atime| or |mtime| is null, then the corresponding time is not modified.
  Touch(TimespecOrNow? atime, TimespecOrNow? mtime) => (Error error);

  // Operations *in* "this" |Directory|:

  // Opens the file specified by |path| with the given |open_flags|. |file| is
  // optional, mainly for consistency with |OpenDirectory()| (but may be useful,
  // together with |kOpenFlagCreate|, for "touching" a file).
  OpenFile(string path, File&? file, uint32 open_flags)
      => (Error error);

  // Opens the directory specified by |path|. |directory| is optional, so that
  // this may be used as a simple "mkdir()" with |kOpenFlagCreate|.
  OpenDirectory(string path,
                Directory&? directory,
                uint32 open_flags) => (Error error);

  // Renames/moves the file/directory given by |path| to |new_path|.
  Rename(string path, string new_path) => (Error error);

  // Deletes the given path, which may be a file or a directory (see
  // |kDeleteFlag...| for details).
  Delete(string path, uint32 delete_flags) => (Error error);

  // TODO(vtl): directory "streaming"?
  // TODO(vtl): "make root" (i.e., prevent cd-ing, etc., to parent); note that
  // this would require a much more complicated implementation (e.g., it needs
  // to be "inherited" by OpenDirectory(), and the enforcement needs to be valid
  // even if the opened directory is subsequently moved -- e.g., closer to the
  // "root")
  // TODO(vtl): Add a "watch"?
  // TODO(vtl): Should we have a "close" method?
  // TODO(vtl): Add Dup() and Reopen() (like File)?
};
