// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

#ifndef RUNTIME_BIN_FILE_SYSTEM_WATCHER_H_
#define RUNTIME_BIN_FILE_SYSTEM_WATCHER_H_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>

#include "bin/builtin.h"
#include "bin/dartutils.h"
#include "bin/namespace.h"

namespace dart {
namespace bin {

class FileSystemWatcher {
 public:
  enum EventType {
    kCreate = 1 << 0,
    kModifyContent = 1 << 1,
    kDelete = 1 << 2,
    kMove = 1 << 3,
    kModifyAttribute = 1 << 4,
    kDeleteSelf = 1 << 5,
    kIsDir = 1 << 6
  };

  struct Event {
    intptr_t path_id;
    int event;
    const char* filename;
    int link;
  };

  static bool IsSupported();
  static intptr_t Init();
  static void Close(intptr_t id);
  static intptr_t WatchPath(intptr_t id,
                            Namespace* namespc,
                            const char* path,
                            int events,
                            bool recursive);
  static void UnwatchPath(intptr_t id, intptr_t path_id);
  static intptr_t GetSocketId(intptr_t id, intptr_t path_id);
  static Dart_Handle ReadEvents(intptr_t id, intptr_t path_id);

 private:
  DISALLOW_COPY_AND_ASSIGN(FileSystemWatcher);
};

}  // namespace bin
}  // namespace dart

#endif  // RUNTIME_BIN_FILE_SYSTEM_WATCHER_H_
