// 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_WEB_APPLICATIONS_COMMANDS_CALLBACK_COMMAND_H_
#define CHROME_BROWSER_WEB_APPLICATIONS_COMMANDS_CALLBACK_COMMAND_H_

#include <memory>

#include "base/functional/callback.h"
#include "base/values.h"
#include "chrome/browser/web_applications/commands/web_app_command.h"

namespace web_app {

class LockDescription;

// CallbackCommand simply runs the callback being passed. This is handy for
// small operations to web app system to avoid defining a new command class but
// still providing isolation for the work done in the callback.
template <typename LockType,
          typename DescriptionType = typename LockType::LockDescription>
class CallbackCommand : public WebAppCommandTemplate<LockType> {
 public:
  CallbackCommand(const std::string& name,
                  std::unique_ptr<DescriptionType> lock_description,
                  base::OnceCallback<void(LockType& lock)> callback);
  CallbackCommand(const std::string& name,
                  std::unique_ptr<DescriptionType> lock_description,
                  base::OnceCallback<base::Value(LockType& lock)> callback);

  ~CallbackCommand() override;

  // WebAppCommandTemplate<LockType>:
  void StartWithLock(std::unique_ptr<LockType> lock) override;
  const LockDescription& lock_description() const override;
  base::Value ToDebugValue() const override;
  void OnShutdown() override {}

 private:
  std::unique_ptr<DescriptionType> lock_description_;
  std::unique_ptr<LockType> lock_;

  base::OnceCallback<base::Value(LockType& lock)> callback_;
  base::Value debug_value_;
};

}  // namespace web_app

#endif  // CHROME_BROWSER_WEB_APPLICATIONS_COMMANDS_CALLBACK_COMMAND_H_
