// 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_JPEG_APP11_IO_H_
#define THIRD_PARTY_CREDENTIO_FORMATS_JPEG_APP11_IO_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 across n APP11 segments including all
// JPEG markers and APP11 headers. The number of segments needed is based on a
// maximum segment size defined by kMaxPayloadSegmentByteSize in the .cc file.
uint64_t CalculateTotalJpegApp11SegmentsSize(uint64_t jumbf_payload_size);

// Writes the given payload as continuous APP11 segments with the same
// segment_id. The payload must be a valid JUMBF box.
absl::Status WriteJpegApp11Payload(uint16_t segment_id,
                                   absl::string_view payload,
                                   riegeli::Writer& output);
}  // namespace credentio

#endif  // THIRD_PARTY_CREDENTIO_FORMATS_JPEG_APP11_IO_H_
