// Copyright 2020 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.

#include "smbfs/smb_filesystem.h"
#include "smbfs/smbfs_impl.h"

#include <utility>

#include <base/bind.h>
#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/logging.h>

namespace smbfs {

SmbFsImpl::SmbFsImpl(base::WeakPtr<SmbFilesystem> fs,
                     mojom::SmbFsRequest request,
                     const base::FilePath& password_file_path)
    : fs_(fs),
      binding_(this, std::move(request)),
      password_file_path_(password_file_path) {
  DCHECK(fs_);
}

SmbFsImpl::~SmbFsImpl() = default;

void SmbFsImpl::RemoveSavedCredentials(
    RemoveSavedCredentialsCallback callback) {
  if (password_file_path_.empty()) {
    std::move(callback).Run(true /* success */);
    return;
  }

  bool success = base::DeleteFile(password_file_path_, false /* recursive */);
  LOG_IF(WARNING, !success) << "Unable to erase credential file";
  std::move(callback).Run(success);
}

void SmbFsImpl::DeleteRecursively(const base::FilePath& path,
                                  DeleteRecursivelyCallback callback) {
  CHECK(path.IsAbsolute());
  CHECK(!path.ReferencesParent());

  fs_->DeleteRecursively(path, std::move(callback));
}

}  // namespace smbfs
