// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

#ifndef THIRD_PARTY_CREDENTIO_VALIDATOR_VALIDATOR_METRICS_H_
#define THIRD_PARTY_CREDENTIO_VALIDATOR_VALIDATOR_METRICS_H_

#include "absl/strings/string_view.h"
#include "proto/manifest.pb.h"
#include "proto/validation_result.pb.h"

namespace credentio {
// Interface for recording metrics for C2PA validation.
class ValidatorMetrics {
 public:
  ValidatorMetrics() = default;
  virtual ~ValidatorMetrics() = default;
  // Records metrics for a partial validation result (without binding checks).
  virtual void RecordPartialValidationResult(
      const PartialValidationResultProto& result) const = 0;
  // Records metrics for a full validation result.
  virtual void RecordValidationResult(
      absl::string_view media_type,
      const ValidationResultProto& result) const = 0;
};

}  // namespace credentio

#endif  // THIRD_PARTY_CREDENTIO_VALIDATOR_VALIDATOR_METRICS_H_
