// Copyright 2026 The IREE Authors
//
// Licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

#include "iree/hal/replay/format.h"

IREE_API_EXPORT const char* iree_hal_replay_file_record_type_string(
    iree_hal_replay_file_record_type_t record_type) {
  switch (record_type) {
    case IREE_HAL_REPLAY_FILE_RECORD_TYPE_NONE:
      return "none";
    case IREE_HAL_REPLAY_FILE_RECORD_TYPE_SESSION:
      return "session";
    case IREE_HAL_REPLAY_FILE_RECORD_TYPE_OBJECT:
      return "object";
    case IREE_HAL_REPLAY_FILE_RECORD_TYPE_OPERATION:
      return "operation";
    case IREE_HAL_REPLAY_FILE_RECORD_TYPE_BLOB:
      return "blob";
    case IREE_HAL_REPLAY_FILE_RECORD_TYPE_UNSUPPORTED:
      return "unsupported";
    default:
      return "unknown";
  }
}

IREE_API_EXPORT const char* iree_hal_replay_object_type_string(
    iree_hal_replay_object_type_t object_type) {
  switch (object_type) {
    case IREE_HAL_REPLAY_OBJECT_TYPE_NONE:
      return "none";
    case IREE_HAL_REPLAY_OBJECT_TYPE_DEVICE:
      return "device";
    case IREE_HAL_REPLAY_OBJECT_TYPE_ALLOCATOR:
      return "allocator";
    case IREE_HAL_REPLAY_OBJECT_TYPE_POOL:
      return "pool";
    case IREE_HAL_REPLAY_OBJECT_TYPE_BUFFER:
      return "buffer";
    case IREE_HAL_REPLAY_OBJECT_TYPE_COMMAND_BUFFER:
      return "command_buffer";
    case IREE_HAL_REPLAY_OBJECT_TYPE_EXECUTABLE_CACHE:
      return "executable_cache";
    case IREE_HAL_REPLAY_OBJECT_TYPE_EXECUTABLE:
      return "executable";
    case IREE_HAL_REPLAY_OBJECT_TYPE_SEMAPHORE:
      return "semaphore";
    case IREE_HAL_REPLAY_OBJECT_TYPE_FILE:
      return "file";
    case IREE_HAL_REPLAY_OBJECT_TYPE_EVENT:
      return "event";
    case IREE_HAL_REPLAY_OBJECT_TYPE_CHANNEL:
      return "channel";
    case IREE_HAL_REPLAY_OBJECT_TYPE_HOST_CALL:
      return "host_call";
    default:
      return "unknown";
  }
}

IREE_API_EXPORT const char* iree_hal_replay_operation_code_string(
    iree_hal_replay_operation_code_t operation_code) {
  switch (operation_code) {
    case IREE_HAL_REPLAY_OPERATION_CODE_NONE:
      return "none";
    case IREE_HAL_REPLAY_OPERATION_CODE_REPLAY_SCOPE_BEGIN:
      return "replay.scope_begin";
    case IREE_HAL_REPLAY_OPERATION_CODE_REPLAY_SCOPE_END:
      return "replay.scope_end";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_TRIM:
      return "device.trim";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUERY_I64:
      return "device.query_i64";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUERY_CAPABILITIES:
      return "device.query_capabilities";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_REFINE_TOPOLOGY_EDGE:
      return "device.refine_topology_edge";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_ASSIGN_TOPOLOGY_INFO:
      return "device.assign_topology_info";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_CREATE_CHANNEL:
      return "device.create_channel";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_CREATE_COMMAND_BUFFER:
      return "device.create_command_buffer";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_CREATE_EVENT:
      return "device.create_event";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_CREATE_EXECUTABLE_CACHE:
      return "device.create_executable_cache";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_IMPORT_FILE:
      return "device.import_file";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_CREATE_SEMAPHORE:
      return "device.create_semaphore";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUERY_QUEUE_POOL_BACKEND:
      return "device.query_queue_pool_backend";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUEUE_ALLOCA:
      return "device.queue_alloca";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUEUE_DEALLOCA:
      return "device.queue_dealloca";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUEUE_FILL:
      return "device.queue_fill";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUEUE_UPDATE:
      return "device.queue_update";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUEUE_COPY:
      return "device.queue_copy";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUEUE_READ:
      return "device.queue_read";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUEUE_WRITE:
      return "device.queue_write";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUEUE_HOST_CALL:
      return "device.queue_host_call";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUEUE_DISPATCH:
      return "device.queue_dispatch";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUEUE_EXECUTE:
      return "device.queue_execute";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_QUEUE_FLUSH:
      return "device.queue_flush";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_PROFILING_BEGIN:
      return "device.profiling_begin";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_PROFILING_FLUSH:
      return "device.profiling_flush";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_PROFILING_END:
      return "device.profiling_end";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_EXTERNAL_CAPTURE_BEGIN:
      return "device.external_capture_begin";
    case IREE_HAL_REPLAY_OPERATION_CODE_DEVICE_EXTERNAL_CAPTURE_END:
      return "device.external_capture_end";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_TRIM:
      return "allocator.trim";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_QUERY_MEMORY_HEAPS:
      return "allocator.query_memory_heaps";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_ALLOCATE_BUFFER:
      return "allocator.allocate_buffer";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_IMPORT_BUFFER:
      return "allocator.import_buffer";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_EXPORT_BUFFER:
      return "allocator.export_buffer";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_VIRTUAL_MEMORY_QUERY_GRANULARITY:
      return "allocator.virtual_memory_query_granularity";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_VIRTUAL_MEMORY_RESERVE:
      return "allocator.virtual_memory_reserve";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_VIRTUAL_MEMORY_RELEASE:
      return "allocator.virtual_memory_release";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_PHYSICAL_MEMORY_ALLOCATE:
      return "allocator.physical_memory_allocate";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_PHYSICAL_MEMORY_FREE:
      return "allocator.physical_memory_free";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_VIRTUAL_MEMORY_MAP:
      return "allocator.virtual_memory_map";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_VIRTUAL_MEMORY_UNMAP:
      return "allocator.virtual_memory_unmap";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_VIRTUAL_MEMORY_PROTECT:
      return "allocator.virtual_memory_protect";
    case IREE_HAL_REPLAY_OPERATION_CODE_ALLOCATOR_VIRTUAL_MEMORY_ADVISE:
      return "allocator.virtual_memory_advise";
    case IREE_HAL_REPLAY_OPERATION_CODE_BUFFER_MAP_RANGE:
      return "buffer.map_range";
    case IREE_HAL_REPLAY_OPERATION_CODE_BUFFER_UNMAP_RANGE:
      return "buffer.unmap_range";
    case IREE_HAL_REPLAY_OPERATION_CODE_BUFFER_INVALIDATE_RANGE:
      return "buffer.invalidate_range";
    case IREE_HAL_REPLAY_OPERATION_CODE_BUFFER_FLUSH_RANGE:
      return "buffer.flush_range";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_BEGIN:
      return "command_buffer.begin";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_END:
      return "command_buffer.end";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_BEGIN_DEBUG_GROUP:
      return "command_buffer.begin_debug_group";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_END_DEBUG_GROUP:
      return "command_buffer.end_debug_group";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_EXECUTION_BARRIER:
      return "command_buffer.execution_barrier";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_SIGNAL_EVENT:
      return "command_buffer.signal_event";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_RESET_EVENT:
      return "command_buffer.reset_event";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_WAIT_EVENTS:
      return "command_buffer.wait_events";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_ADVISE_BUFFER:
      return "command_buffer.advise_buffer";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_FILL_BUFFER:
      return "command_buffer.fill_buffer";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_UPDATE_BUFFER:
      return "command_buffer.update_buffer";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_COPY_BUFFER:
      return "command_buffer.copy_buffer";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_COLLECTIVE:
      return "command_buffer.collective";
    case IREE_HAL_REPLAY_OPERATION_CODE_COMMAND_BUFFER_DISPATCH:
      return "command_buffer.dispatch";
    case IREE_HAL_REPLAY_OPERATION_CODE_EXECUTABLE_CACHE_INFER_FORMAT:
      return "executable_cache.infer_format";
    case IREE_HAL_REPLAY_OPERATION_CODE_EXECUTABLE_CACHE_CAN_PREPARE_FORMAT:
      return "executable_cache.can_prepare_format";
    case IREE_HAL_REPLAY_OPERATION_CODE_EXECUTABLE_CACHE_PREPARE_EXECUTABLE:
      return "executable_cache.prepare_executable";
    case IREE_HAL_REPLAY_OPERATION_CODE_EXECUTABLE_FUNCTION_COUNT:
      return "executable.function_count";
    case IREE_HAL_REPLAY_OPERATION_CODE_EXECUTABLE_FUNCTION_INFO:
      return "executable.function_info";
    case IREE_HAL_REPLAY_OPERATION_CODE_EXECUTABLE_FUNCTION_PARAMETERS:
      return "executable.function_parameters";
    case IREE_HAL_REPLAY_OPERATION_CODE_EXECUTABLE_LOOKUP_FUNCTION_BY_NAME:
      return "executable.lookup_function_by_name";
    default:
      return "unknown";
  }
}

IREE_API_EXPORT const char* iree_hal_replay_payload_type_string(
    iree_hal_replay_payload_type_t payload_type) {
  switch (payload_type) {
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_NONE:
      return "none";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_BUFFER_OBJECT:
      return "buffer_object";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_ALLOCATOR_ALLOCATE_BUFFER:
      return "allocator_allocate_buffer";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_ALLOCATOR_IMPORT_BUFFER:
      return "allocator_import_buffer";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_REPLAY_SCOPE:
      return "replay_scope";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_BUFFER_RANGE:
      return "buffer_range";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_BUFFER_RANGE_DATA:
      return "buffer_range_data";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_COMMAND_BUFFER_OBJECT:
      return "command_buffer_object";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_EXECUTABLE_CACHE_OBJECT:
      return "executable_cache_object";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_EXECUTABLE_PREPARE:
      return "executable_prepare";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_DISPATCH:
      return "dispatch";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_DEVICE_QUEUE_EXECUTE:
      return "device_queue_execute";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_SEMAPHORE_OBJECT:
      return "semaphore_object";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_COMMAND_BUFFER_COPY_BUFFER:
      return "command_buffer_copy_buffer";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_DEVICE_QUEUE_ALLOCA:
      return "device_queue_alloca";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_COMMAND_BUFFER_EXECUTION_BARRIER:
      return "command_buffer_execution_barrier";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_DEVICE_QUEUE_DEALLOCA:
      return "device_queue_dealloca";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_DEVICE_QUEUE_FILL:
      return "device_queue_fill";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_DEVICE_QUEUE_UPDATE:
      return "device_queue_update";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_DEVICE_QUEUE_COPY:
      return "device_queue_copy";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_COMMAND_BUFFER_FILL_BUFFER:
      return "command_buffer_fill_buffer";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_COMMAND_BUFFER_UPDATE_BUFFER:
      return "command_buffer_update_buffer";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_EVENT_OBJECT:
      return "event_object";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_COMMAND_BUFFER_EVENT:
      return "command_buffer_event";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_COMMAND_BUFFER_WAIT_EVENTS:
      return "command_buffer_wait_events";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_FILE_OBJECT:
      return "file_object";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_DEVICE_QUEUE_READ:
      return "device_queue_read";
    case IREE_HAL_REPLAY_PAYLOAD_TYPE_DEVICE_QUEUE_WRITE:
      return "device_queue_write";
    default:
      return "unknown";
  }
}
