// 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_RECURSIVE_COPY_PROGRESS_H_
#define SMBPROVIDER_RECURSIVE_COPY_PROGRESS_H_

#include <memory>
#include <string>

#include "smbprovider/copy_progress_interface.h"
#include "smbprovider/file_copy_progress.h"
#include "smbprovider/iterator/pre_depth_first_iterator.h"
#include "smbprovider/samba_interface.h"

namespace smbprovider {

// Keeps track of the progress of a CopyDirectory operation.
// Each call to ContinueCopy performs one step of the recursive copy progress
// which is either copying a chunk of data in a file or creating a directory.
class RecursiveCopyProgress : public CopyProgressInterface {
 public:
  explicit RecursiveCopyProgress(SambaInterface* samba_interface);

  ~RecursiveCopyProgress() override;

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

 private:
  void FinishCopy();

  int32_t CreateDirectory(const DirectoryEntry& entry);

  int32_t StartFileCopy(const DirectoryEntry& entry);

  int32_t ContinueFileCopy();

  std::string ConvertToTargetPath(const std::string& full_path) const;

  // Creates a PreDepthFirstIterator for the source directory at |source_root_|
  // and assigns |copy_iterator_| to it.
  void CreateCopySourceIterator();

  std::unique_ptr<PreDepthFirstIterator> copy_iterator_;
  std::unique_ptr<FileCopyProgress> file_progress_;
  bool is_started_ = false;
  bool is_done_ = false;
  SambaInterface* samba_interface_;  // not owned.
  std::string source_root_;
  std::string target_root_;

  DISALLOW_COPY_AND_ASSIGN(RecursiveCopyProgress);
};

}  // namespace smbprovider

#endif  // SMBPROVIDER_RECURSIVE_COPY_PROGRESS_H_
