// 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.
//

edition = "2024";

package credentio;

import "cbor/tags.proto";

// Result of a single validation check.
// See `status-map` at
// https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#_returning_validation_results
// for more details.
message ValidationStatus {
  // A label-formatted string that describes the status.
  // A list of all possible status codes can be found at
  // https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#_standard_status_codes.
  string code = 1 [(cbor.tags) = { is_required: true }];
  // JPEG Universal Metadata Box Format (JUMBF) URI reference to the relevant
  // element of the manifest store, including `self#jumbf=/c2pa/` prefix.
  // See https://www.iso.org/standard/84635.html for more details about JUMBF
  // standard.
  string url = 2;
  //  A human readable string explaining the status.
  string explanation = 3;
}

// Results of a manifest validation.
// Validation is successful if `failures` is empty.
// See `status-codes-map` at
// https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#_returning_validation_results.
message ValidationStatusSet {
  repeated ValidationStatus failures = 1
      [(cbor.tags) = { name: "failure", is_required: true }];
  repeated ValidationStatus successes = 2
      [(cbor.tags) = { name: "success", is_required: true }];
  repeated ValidationStatus informationals = 3
      [(cbor.tags) = { name: "informational", is_required: true }];
}
