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

#ifndef CHROME_BROWSER_ASH_FILE_MANAGER_FUSEBOX_DAEMON_H_
#define CHROME_BROWSER_ASH_FILE_MANAGER_FUSEBOX_DAEMON_H_

#include <map>
#include <string>

#include "base/component_export.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "chromeos/ash/components/disks/disk_mount_manager.h"

namespace file_manager {

class COMPONENT_EXPORT(ASH_DBUS_CROS_DISKS) FuseBoxDaemon
    : public base::RefCounted<FuseBoxDaemon> {
 public:
  // Returns the fusebox daemon. Creates the fusebox daemon if needed.
  static scoped_refptr<FuseBoxDaemon> GetInstance();

  // Attach fusebox storage: adds fusebox daemon <mount-point>/subdir used to
  // serve the content of the Chrome storage::FileSystemURL |url| via FUSE to
  // the Linux file system. The <mount-point>/subdir content is read-write by
  // default: use |read_only| true to make the content read-only.
  void AttachStorage(const std::string& subdir,
                     const std::string& url,
                     bool read_only);

  // Detach fusebox storage: removes fusebox daemon <mount-point>/subdir.
  void DetachStorage(const std::string& subdir);

 private:
  friend class base::RefCounted<FuseBoxDaemon>;

  FuseBoxDaemon();
  ~FuseBoxDaemon();

  // Cros-disks mount manager.
  using CrosDisksMountManager = ::ash::disks::DiskMountManager;
  raw_ptr<CrosDisksMountManager, ExperimentalAsh> cros_disks_mount_manager_ =
      nullptr;

  // FuseBox daemon URI: cros-disks URI protocol is fusebox://<mount-point>.
  static char* CrosDisksFuseBoxHelperURI() {
    static char kCrosDisksFuseBoxHelperURI[] = "fusebox://fusebox";
    return kCrosDisksFuseBoxHelperURI;
  }

  // Construction creates and mounts the cros-disks fusebox daemon.
  using FuseBoxMountInfo = ::ash::disks::DiskMountManager::MountPoint;
  void MountResponse(ash::MountError error, const FuseBoxMountInfo& info);

  // True if the fusebox daemon was successfully mounted.
  bool mounted_ = false;

  // List of `AttachStorage` calls prior to the fusebox daemon mount.
  using UrlReadOnlyPair = std::pair<std::string, bool>;
  std::map<std::string, UrlReadOnlyPair> pending_attach_storage_calls_;

  // base::WeakPtr{this} factory.
  base::WeakPtrFactory<FuseBoxDaemon> weak_ptr_factory_{this};
};

}  // namespace file_manager

#endif  // CHROME_BROWSER_ASH_FILE_MANAGER_FUSEBOX_DAEMON_H_
