// Copyright 2014 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 FEEDBACK_FEEDBACK_SERVICE_H_
#define FEEDBACK_FEEDBACK_SERVICE_H_

#include "dbus/exported_object.h"

#include <string>

namespace userfeedback {
class ExtensionSubmit;
}

namespace feedback {

class FeedbackUploader;

class FeedbackService : public base::RefCounted<FeedbackService> {
 public:
  explicit FeedbackService(feedback::FeedbackUploader* uploader);
  FeedbackService(const FeedbackService&) = delete;
  FeedbackService& operator=(const FeedbackService&) = delete;

  virtual ~FeedbackService();

  // Send the given report to the server |uploader_| is configured for.
  // The callback will be called with
  void SendFeedback(
      const userfeedback::ExtensionSubmit& feedback,
      base::OnceCallback<void(bool, const std::string&)> callback);

  void QueueExistingReport(const std::string& data);

 private:
  feedback::FeedbackUploader* uploader_;
};

class DBusFeedbackServiceImpl : public FeedbackService {
 public:
  explicit DBusFeedbackServiceImpl(feedback::FeedbackUploader* uploader);
  DBusFeedbackServiceImpl(const DBusFeedbackServiceImpl&) = delete;
  DBusFeedbackServiceImpl& operator=(const DBusFeedbackServiceImpl&) = delete;

  virtual ~DBusFeedbackServiceImpl();

  bool Start(dbus::Bus* bus);

 private:
  void DBusSendFeedback(dbus::MethodCall* method_call,
                        dbus::ExportedObject::ResponseSender sender);

  void DBusFeedbackSent(dbus::MethodCall* method_call,
                        dbus::ExportedObject::ResponseSender sender,
                        bool status,
                        const std::string& message);
};

}  // namespace feedback

#endif  // FEEDBACK_FEEDBACK_SERVICE_H_
