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

#ifndef CROS_DISKS_PARTITION_MANAGER_H_
#define CROS_DISKS_PARTITION_MANAGER_H_

#include <memory>
#include <set>
#include <string>

#include <base/bind.h>
#include <base/macros.h>
#include <base/memory/weak_ptr.h>
#include <brillo/process/process_reaper.h>
#include <chromeos/dbus/service_constants.h>
#include <gtest/gtest_prod.h>

#include "cros-disks/disk_monitor.h"
#include "cros-disks/sandboxed_process.h"

namespace cros_disks {

using PartitionCompleteCallback =
    base::OnceCallback<void(const base::FilePath&, PartitionErrorType)>;

class PartitionManager {
 public:
  PartitionManager(brillo::ProcessReaper* process_reaper,
                   DiskMonitor* disk_monitor)
      : process_reaper_(process_reaper), disk_monitor_(disk_monitor) {}

  virtual ~PartitionManager() = default;

  // Starts a partition process of a given device to partition it into one
  // partition.
  void StartSinglePartitionFormat(const base::FilePath& device_path,
                                  PartitionCompleteCallback callback);

 protected:
  // virtual to be used for testing purpose.
  virtual std::unique_ptr<SandboxedProcess> CreateSandboxedProcess() const;

 private:
  void OnPartitionProcessTerminated(const base::FilePath& device_path,
                                    PartitionCompleteCallback callback,
                                    const siginfo_t& info);

  brillo::ProcessReaper* process_reaper_;

  // A list of outstanding partitioning processes indexed by device path.
  std::set<base::FilePath> partition_process_;

  DiskMonitor* disk_monitor_;

  base::WeakPtrFactory<PartitionManager> weak_ptr_factory_{this};

  DISALLOW_COPY_AND_ASSIGN(PartitionManager);
};

}  // namespace cros_disks

#endif  // CROS_DISKS_PARTITION_MANAGER_H_
