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

#ifndef COMPONENTS_ON_DEVICE_TRANSLATION_SERVICE_FILE_OPERATION_PROXY_IMPL_H_
#define COMPONENTS_ON_DEVICE_TRANSLATION_SERVICE_FILE_OPERATION_PROXY_IMPL_H_

#include <vector>

#include "base/files/file_path.h"
#include "base/task/sequenced_task_runner.h"
#include "components/on_device_translation/public/mojom/on_device_translation_service.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver.h"

namespace on_device_translation {

// Implementation of FileOperationProxy. It is used to provide file operations
// to the OnDeviceTranslationService. This is created on the UI thread and
// destroyed on the background thread of the passed `task_runner`.
class FileOperationProxyImpl : public mojom::FileOperationProxy {
 public:
  FileOperationProxyImpl(scoped_refptr<base::SequencedTaskRunner> task_runner,
                         std::vector<base::FilePath> package_paths);
  ~FileOperationProxyImpl() override;

  // FileOperationProxy implementation:
  void FileExists(uint32_t package_index,
                  const base::FilePath& relative_path,
                  FileExistsCallback callback) override;
  void Open(uint32_t package_index,
            const base::FilePath& relative_path,
            OpenCallback callback) override;

 private:
  // Get the file path for the given `package_index` and `relative_path`.
  // Returns an empty path if the `package_index` is invalid or the
  // relative_path` is invalid.
  base::FilePath GetFilePath(uint32_t package_index,
                             const base::FilePath& relative_path) const;

  scoped_refptr<base::SequencedTaskRunner> task_runner_;
  std::vector<base::FilePath> package_paths_;
};

}  // namespace on_device_translation

#endif  // COMPONENTS_ON_DEVICE_TRANSLATION_SERVICE_FILE_OPERATION_PROXY_IMPL_H_
