// Copyright 2019 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 SMBFS_SMBFS_DAEMON_H_
#define SMBFS_SMBFS_DAEMON_H_

#include <fuse_lowlevel.h>
#include <sys/types.h>

#include <memory>
#include <string>

#include <base/callback.h>
#include <base/files/file_path.h>
#include <base/files/scoped_temp_dir.h>
#include <base/macros.h>
#include <brillo/daemons/dbus_daemon.h>
#include <mojo/core/embedder/scoped_ipc_support.h>
#include <mojo/public/cpp/bindings/binding.h>

#include "smbfs/smbfs_bootstrap_impl.h"

namespace smbfs {

class Filesystem;
class FuseSession;
class KerberosArtifactSynchronizer;
struct Options;
struct SmbCredential;

class SmbFsDaemon : public brillo::DBusDaemon,
                    public SmbFsBootstrapImpl::Delegate {
 public:
  SmbFsDaemon(fuse_chan* chan, const Options& options);
  ~SmbFsDaemon() override;

 protected:
  // brillo::Daemon overrides.
  int OnInit() override;
  int OnEventLoopStarted() override;

  // SmbFsBootstrapImpl::Delegate overrides.
  void SetupKerberos(mojom::KerberosConfigPtr kerberos_config,
                     base::OnceCallback<void(bool success)> callback) override;
  std::unique_ptr<SmbFilesystem> CreateSmbFilesystem(
      const std::string& share_path,
      std::unique_ptr<SmbCredential> credential) override;
  bool StartFuseSession(std::unique_ptr<Filesystem> fs) override;
  void OnBootstrapConnectionError() override;

 private:
  // Set up libsmbclient configuration files.
  bool SetupSmbConf();

  // Returns the full path to the given kerberos configuration file.
  base::FilePath KerberosConfFilePath(const std::string& file_name);

  // Initialise Mojo IPC system.
  bool InitMojo();

  fuse_chan* chan_;
  const bool use_test_fs_;
  const std::string share_path_;
  const uid_t uid_;
  const gid_t gid_;
  const std::string mojo_id_;
  std::unique_ptr<FuseSession> session_;
  std::unique_ptr<Filesystem> fs_;
  base::ScopedTempDir temp_dir_;
  std::unique_ptr<KerberosArtifactSynchronizer> kerberos_sync_;

  std::unique_ptr<mojo::core::ScopedIPCSupport> ipc_support_;
  std::unique_ptr<SmbFsBootstrapImpl> bootstrap_impl_;

  DISALLOW_COPY_AND_ASSIGN(SmbFsDaemon);
};

}  // namespace smbfs

#endif  // SMBFS_SMBFS_DAEMON_H_
