/* Copyright 2021 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_HW_VERIFICATION_REPORT_GETTER_IMPL_H_
#define HARDWARE_VERIFIER_HW_VERIFICATION_REPORT_GETTER_IMPL_H_

#include <memory>
#include <utility>

#include <base/optional.h>
#include <base/strings/string_piece.h>

#include "hardware_verifier/hardware_verifier.pb.h"
#include "hardware_verifier/hw_verification_report_getter.h"
#include "hardware_verifier/hw_verification_spec_getter.h"
#include "hardware_verifier/probe_result_getter.h"
#include "hardware_verifier/verifier.h"

namespace hardware_verifier {

// The actual implementation to the |HwVerificationReportGetter|.
class HwVerificationReportGetterImpl : public HwVerificationReportGetter {
 public:
  HwVerificationReportGetterImpl();
  HwVerificationReportGetterImpl(const HwVerificationReportGetterImpl&) =
      delete;
  HwVerificationReportGetterImpl& operator=(
      const HwVerificationReportGetterImpl&) = delete;

  base::Optional<HwVerificationReport> Get(
      const base::StringPiece& probe_result_file,
      const base::StringPiece& hw_verification_spec_file,
      ErrorCode* error_code) const override;

 protected:
  // This constructor is reserved only for testing.
  explicit HwVerificationReportGetterImpl(
      std::unique_ptr<ProbeResultGetter> pr_getter,
      std::unique_ptr<HwVerificationSpecGetter> vs_getter,
      std::unique_ptr<Verifier> verifier)
      : pr_getter_(std::move(pr_getter)),
        vs_getter_(std::move(vs_getter)),
        verifier_(std::move(verifier)) {}

 private:
  std::unique_ptr<ProbeResultGetter> pr_getter_;
  std::unique_ptr<HwVerificationSpecGetter> vs_getter_;
  std::unique_ptr<Verifier> verifier_;
};

}  // namespace hardware_verifier

#endif  // HARDWARE_VERIFIER_HW_VERIFICATION_REPORT_GETTER_IMPL_H_
