// 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_FORMATS_GIF_CONSTANTS_H_
#define THIRD_PARTY_CREDENTIO_FORMATS_GIF_CONSTANTS_H_

#include <cstdint>

#include "absl/strings/string_view.h"

namespace credentio {

// GIF format: https://giflib.sourceforge.net/whatsinagif/bits_and_bytes.html
// C2PA only supports GIF89a format:
// https://spec.c2pa.org/specifications/specifications/2.2/specs/C2PA_Specification.html#_gif_specific_handling
constexpr absl::string_view kGifHeaderBlock = "GIF89a";

// Header Block (6) + Logical Screen Descriptor (7) + Trailer (1)
constexpr int64_t kMinGifSize = 6 + 7 + 1;

// Introducers (First Byte)
constexpr uint8_t kGifExtensionIntroducer = 0x21;
constexpr uint8_t kGifImageDescriptorIntroducer = 0x2C;
constexpr uint8_t kGifTrailerIntroducer = 0x3B;

// Extension Label (Second Byte when introducer is 0x21)
constexpr uint8_t kGifExtensionPlainText = 0x01;
constexpr uint8_t kGifExtensionGraphicsControl = 0xF9;
constexpr uint8_t kGifExtensionComment = 0xFE;
constexpr uint8_t kGifExtensionApplication = 0xFF;

// Corresponding C2PA Box Labels
constexpr absl::string_view kGifLogicalScreenDescriptorLabel = "LSD";
constexpr absl::string_view kGifImageDescriptorLabel = "2C";
constexpr absl::string_view kGifTrailerLabel = "3B";
constexpr absl::string_view kGifImageDataLabel = "TBID";
constexpr absl::string_view kGifExtensionPlainTextLabel = "2101";
constexpr absl::string_view kGifExtensionGraphicsControlLabel = "21F9";
constexpr absl::string_view kGifExtensionCommentLabel = "21FE";
constexpr absl::string_view kGifExtensionApplicationLabel = "21FF";
constexpr absl::string_view kGifAfterLabel = "c2pa.after";

// C2PA Block Information
// Embedding Information:
// https://spec.c2pa.org/specifications/specifications/2.2/specs/C2PA_Specification.html#_embedding_manifests_into_gifs
constexpr uint8_t kGifC2paExtensionInfoSize = 0x0B;
constexpr absl::string_view kGifC2paIdentifier = "C2PA_GIF";
constexpr uint16_t kGifC2paAuthenticationCode = 0x0100;
constexpr absl::string_view kGifC2paLabel = "C2PA";

}  // namespace credentio

#endif  // THIRD_PARTY_CREDENTIO_FORMATS_GIF_CONSTANTS_H_
