// Copyright 2020 The Fuchsia 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 SRC_DEVELOPER_FORENSICS_FEEDBACK_DATA_DATA_REGISTER_H_
#define SRC_DEVELOPER_FORENSICS_FEEDBACK_DATA_DATA_REGISTER_H_

#include <fuchsia/feedback/cpp/fidl.h>

#include "src/developer/forensics/feedback_data/annotations/types.h"
#include "src/developer/forensics/feedback_data/datastore.h"
#include "zircon/third_party/rapidjson/include/rapidjson/document.h"

namespace forensics {
namespace feedback_data {

// Registers data useful to attach in feedback reports (crash, user feedback or bug reports).
class DataRegister : public fuchsia::feedback::ComponentDataRegister {
 public:
  DataRegister(Datastore* datastore, std::string register_filepath);

  // |fuchsia.feedback.ComponentDataRegister|
  void Upsert(fuchsia::feedback::ComponentData data, UpsertCallback callback);

  // Exposed for testing purposes.
  const std::map<std::string, Annotations>& GetNamespacedAnnotations() const {
    return namespaced_annotations_;
  };

 private:
  void RestoreFromJson();
  void UpdateJson(const std::string& _namespace, const Annotations& annotations);

  Datastore* datastore_;

  std::map<std::string, Annotations> namespaced_annotations_;

  rapidjson::Document register_json_;
  std::string register_filepath_;
};

}  // namespace feedback_data
}  // namespace forensics

#endif  // SRC_DEVELOPER_FORENSICS_FEEDBACK_DATA_DATA_REGISTER_H_
