// 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";
import "google/protobuf/struct.proto";

// Schema for AI Model Disclosure Metadata (c2pa.ai-disclosure)
// Matches C2PA 2.4 technical specification.
message AiDisclosureAssertion {
  // Required. Enumerated string identifying the AI model type.
  // Examples: "c2pa.types.model.onnx", "c2pa.types.model.flax"
  string model_type = 1 [(cbor.tags) = { name: "modelType" }];

  // Optional. Human-readable name of the model.
  string model_name = 2 [(cbor.tags) = { name: "modelName" }];

  // Optional. Unique identifier for the model (e.g. a URI or PURL).
  string model_identifier = 3 [(cbor.tags) = { name: "modelIdentifier" }];

  // Optional. Structured content profile.
  ContentProfile content_profile = 4 [(cbor.tags) = { name: "contentProfile" }];

  message ContentProfile {
    // Optional. Degree of human intervention.
    // Spec values: "fully_autonomous", "prompt_guided", "human_validated"
    string human_oversight_level = 1
        [(cbor.tags) = { name: "humanOversightLevel" }];

    // Optional. Scientific domain of the content (e.g. arXiv taxonomy "cs.AI").
    repeated string scientific_domain = 2
        [(cbor.tags) = { name: "scientificDomain" }];

    // Optional. Extensible metadata.
    google.protobuf.Struct metadata = 3 [(cbor.tags) = { mode: MODE_SKIP }];
  }
}
