/* 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 HARDWARE_VERIFIER_VERIFIER_IMPL_H_
#define HARDWARE_VERIFIER_VERIFIER_IMPL_H_

#include "hardware_verifier/verifier.h"

#include <memory>
#include <string>
#include <vector>

#include <chromeos-config/libcros_config/cros_config.h>
#include <google/protobuf/descriptor.h>

namespace hardware_verifier {

constexpr auto kCrosConfigModelNamePath = "/";
constexpr auto kCrosConfigModelNameKey = "name";

class VerifierImpl : public Verifier {
 public:
  VerifierImpl();

  base::Optional<HwVerificationReport> Verify(
      const runtime_probe::ProbeResult& probe_result,
      const HwVerificationSpec& hw_verification_spec) const override;

  void SetCrosConfigForTesting(
      std::unique_ptr<brillo::CrosConfigInterface> cros_config);

 private:
  struct CompCategoryInfo {
    // Enum value of of this category.
    int enum_value;

    // Enum name of this category.
    std::string enum_name;

    // The field descriptor of the component list in
    // |runtime_probe::ProbeResult|.
    const google::protobuf::FieldDescriptor* probe_result_comp_field;

    // The field descriptor of the component name in
    // |runtime_probe::ProbeResult|.
    const google::protobuf::FieldDescriptor* probe_result_comp_name_field;

    // The field descriptor of the component values in
    // |runtime_probe::ProbeResult|.
    const google::protobuf::FieldDescriptor* probe_result_comp_values_field;

    // The field descriptor of the component values in |HwVerificationReport|.
    const google::protobuf::FieldDescriptor* report_comp_values_field;
  };

  std::unique_ptr<brillo::CrosConfigInterface> cros_config_;

  // An array that records each component category's related info like enum
  // value and name.
  std::vector<CompCategoryInfo> comp_category_infos_;

  std::string GetModelName() const;
};

}  // namespace hardware_verifier

#endif  // HARDWARE_VERIFIER_VERIFIER_IMPL_H_
