// Copyright 2018 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 SMBPROVIDER_FILE_COPY_PROGRESS_H_
#define SMBPROVIDER_FILE_COPY_PROGRESS_H_

#include <string>

#include "smbprovider/copy_progress_interface.h"
#include "smbprovider/samba_interface.h"

namespace smbprovider {

// Keeps track of the progress of a CopyFile operation.
class FileCopyProgress : public CopyProgressInterface {
 public:
  explicit FileCopyProgress(SambaInterface* samba_interface);

  // Allows setting of |iteration_chunk_size_| for testing.
  FileCopyProgress(SambaInterface* samba_interface, off_t iteration_chunk_size);

  ~FileCopyProgress() override;

  // CopyProgressInterface overrides.
  bool StartCopy(const std::string& source,
                 const std::string& target,
                 int32_t* error) override;
  bool ContinueCopy(int32_t* error) override;

 private:
  // Opens |file_path| to copy from, setting |source_fd_|. Returns 0 on success
  // and errno on failure.
  bool OpenCopySource(const std::string& file_path, int32_t* error);

  // Opens |file_path| to copy to, setting |target_fd_|. Returns 0 on success
  // and errno on failure.
  bool OpenCopyTarget(const std::string& file_path, int32_t* error);

  // Closes |source_fd_| and |target_fd_| if open.
  void CloseCopySourceAndTarget();

  // Closes any open files and sets |is_done_| to true.
  void FinishCopy();

  bool is_started_ = false;
  bool is_done_ = false;
  SambaInterface* samba_interface_;  // not owned.
  const off_t iteration_chunk_size_;
  int32_t source_fd_ = -1;
  int32_t target_fd_ = -1;
  off_t bytes_remaining_;

  DISALLOW_COPY_AND_ASSIGN(FileCopyProgress);
};

}  // namespace smbprovider

#endif  // SMBPROVIDER_FILE_COPY_PROGRESS_H_
