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

#include "formats/riff/assessor.h"

#include <cstdint>

#include "absl/status/status.h"
#include "absl/status/status_macros.h"
#include "absl/status/statusor.h"
#include "formats/riff/chunk_header.h"
#include "riegeli/bytes/reader.h"

namespace credentio {

absl::StatusOr<bool> RiffAssessor::IsSupported(riegeli::Reader& input) const {
  int64_t starting_position = input.pos();

  ChunkHeader riff_chunk_header;
  ABSL_RETURN_IF_ERROR(riff_chunk_header.Read(input));
  if (!input.Seek(starting_position) || input.pos() != starting_position) {
    return input.StatusOrAnnotate(
        absl::DataLossError("Failed to seek to starting position"));
  }

  return riff_chunk_header.id == "RIFF";
}

}  // namespace credentio
