// 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_BLOCK_H_
#define THIRD_PARTY_CREDENTIO_FORMATS_GIF_BLOCK_H_

#include <cstdint>

#include "absl/status/status.h"
#include "absl/strings/string_view.h"
#include "riegeli/bytes/writer.h"

namespace credentio {

// Given the size of a jumbf payload in bytes, it will return the total number
// of bytes required to store the payload within a GIF block where the data is
// segmented into blocks of at most 255 bytes.
uint64_t CalculateTotalGifC2paBlockSize(uint64_t jumbf_payload_size);

// Writes the given payload as a GIF block with n blocks of at most 255 bytes
// each.
absl::Status WriteGifC2paBlock(absl::string_view payload,
                               riegeli::Writer& output);
}  // namespace credentio

#endif  // THIRD_PARTY_CREDENTIO_FORMATS_GIF_BLOCK_H_
