/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
#pragma once

#include "cmConfigure.h" // IWYU pragma: keep

#include <functional>
#include <memory>
#include <string>
#include <vector>

#include <cm3p/uv.h>

class cmRootWatcher;

class cmFileMonitor
{

public:
  cmFileMonitor(uv_loop_t* l);
  ~cmFileMonitor();

  cmFileMonitor(cmFileMonitor const&) = delete;
  cmFileMonitor& operator=(cmFileMonitor const&) = delete;

  using Callback = std::function<void(const std::string&, int, int)>;
  void MonitorPaths(const std::vector<std::string>& paths, Callback const& cb);
  void StopMonitoring();

  std::vector<std::string> WatchedFiles() const;
  std::vector<std::string> WatchedDirectories() const;

private:
  std::unique_ptr<cmRootWatcher> Root;
};
