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

#ifndef MIDIS_FILE_HANDLER_H_
#define MIDIS_FILE_HANDLER_H_

#include <map>

#include <memory>
#include <string>
#include <utility>

#include <base/callback.h>
#include <base/files/scoped_file.h>
#include <base/memory/weak_ptr.h>
#include <brillo/message_loops/message_loop.h>
#include <gtest/gtest_prod.h>

namespace midis {

class Device;

// Class which handles file reading and input data handling functionality for a
// particular subdevice.
class FileHandler {
 public:
  using DeviceDataCallback = base::Callback<void(
      const char* buffer, uint32_t subdevice_id, size_t buf_len)>;
  FileHandler(const std::string& path,
              const DeviceDataCallback& device_data_cb);
  ~FileHandler();

  static std::unique_ptr<FileHandler> Create(
      const std::string& path, uint32_t subdevice_id,
      const DeviceDataCallback& device_data_cb);

  // Each FileHandler class has a fd associated with it. This function writes
  // data to that fd.
  void WriteData(const uint8_t* buffer, size_t buf_len);

 private:
  // Callback used to process incoming MIDI data from h/w.
  // This function in turn calls a user supplied callback which determines what
  // is to be done with the read data (send it to clients, print it out, etc.).
  void HandleDeviceRead(uint32_t subdevice_id);
  // Opens a ScopedFD and starts a watch on the resulting FD. This function is
  // also called as a part of the Create() factory method.
  bool StartMonitoring(uint32_t subdevice_id);
  // Cancels the watch on the ScopedFD. This function is also called as a part
  // of the class destructor.
  void StopMonitoring();
  void SetDeviceDataCbForTesting(const DeviceDataCallback& cb);

  base::ScopedFD fd_;
  brillo::MessageLoop::TaskId taskid_;
  std::string path_;
  const Device* device_;
  DeviceDataCallback device_data_cb_;
  base::WeakPtrFactory<FileHandler> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(FileHandler);
};

}  // namespace midis

#endif  // MIDIS_FILE_HANDLER_H_
