module RubyLLM::Providers::Bedrock::Streaming::PreludeHandling

def calculate_positions(offset, total_length, headers_length)

def calculate_positions(offset, total_length, headers_length)
  headers_end = offset + 12 + headers_length
  payload_end = offset + total_length - 4 # Subtract 4 bytes for message CRC
  [headers_end, payload_end]
end

def can_read_prelude?(chunk, offset)

def can_read_prelude?(chunk, offset)
  chunk.bytesize - offset >= 12
end

def extract_potential_lengths(chunk, pos)

def extract_potential_lengths(chunk, pos)
  [
    chunk[pos...pos + 4].unpack1('N'),
    chunk[pos + 4...pos + 8].unpack1('N')
  ]
end

def find_next_message(chunk, offset)

def find_next_message(chunk, offset)
  next_prelude = find_next_prelude(chunk, offset + 4)
  next_prelude || chunk.bytesize
end

def find_next_prelude(chunk, start_offset)

def find_next_prelude(chunk, start_offset)
  scan_range(chunk, start_offset).each do |pos|
    return pos if valid_prelude_at_position?(chunk, pos)
  end
  nil
end

def read_prelude(chunk, offset)

def read_prelude(chunk, offset)
  total_length = chunk[offset...offset + 4].unpack1('N')
  headers_length = chunk[offset + 4...offset + 8].unpack1('N')
  [total_length, headers_length]
end

def scan_range(chunk, start_offset)

def scan_range(chunk, start_offset)
  (start_offset...(chunk.bytesize - 8))
end

def valid_lengths?(total_length, headers_length)

def valid_lengths?(total_length, headers_length)
  validate_length_constraints(total_length, headers_length)
end

def valid_positions?(headers_end, payload_end, chunk_size)

def valid_positions?(headers_end, payload_end, chunk_size)
  return false if headers_end >= payload_end
  return false if headers_end >= chunk_size
  return false if payload_end > chunk_size
  true
end

def valid_prelude_at_position?(chunk, pos)

def valid_prelude_at_position?(chunk, pos)
  lengths = extract_potential_lengths(chunk, pos)
  validate_length_constraints(*lengths)
end

def validate_length_constraints(total_length, headers_length)

def validate_length_constraints(total_length, headers_length)
  return false if total_length.nil? || headers_length.nil?
  return false if total_length <= 0 || total_length > 1_000_000
  return false if headers_length <= 0 || headers_length >= total_length
  true
end