//! `RuntimeImports`: the catalog of JS-bridge runtime functions imported by
//! the generated WASM module. Field order defines WASM import indices.
//!
//! Pure code-movement from `mod.rs`.

#[allow(unused_imports)]
use super::*;

/// Import function indices (must match the order imports are added)
/// Most fields are unused directly but their indices define the WASM import order.
#[derive(Clone, Copy)]
#[allow(dead_code)]
pub(super) struct RuntimeImports {
    pub(super) string_new: u32,
    pub(super) console_log: u32,
    pub(super) console_warn: u32,
    pub(super) console_error: u32,
    pub(super) string_concat: u32,
    pub(super) js_add: u32,
    pub(super) string_eq: u32,
    pub(super) string_len: u32,
    pub(super) jsvalue_to_string: u32,
    pub(super) is_truthy: u32,
    pub(super) js_strict_eq: u32,
    pub(super) math_floor: u32,
    pub(super) math_ceil: u32,
    pub(super) math_round: u32,
    pub(super) math_abs: u32,
    pub(super) math_sqrt: u32,
    pub(super) math_pow: u32,
    pub(super) math_random: u32,
    pub(super) math_log: u32,
    pub(super) date_now: u32,
    pub(super) js_typeof: u32,
    pub(super) math_min: u32,
    pub(super) math_max: u32,
    pub(super) parse_int: u32,
    pub(super) parse_float: u32,
    // Phase 0 additions
    pub(super) js_mod: u32,
    pub(super) is_null_or_undefined: u32,
    // Phase 1: Object operations
    pub(super) object_new: u32,
    pub(super) object_set: u32,
    pub(super) object_get: u32,
    pub(super) object_get_dynamic: u32,
    pub(super) object_set_dynamic: u32,
    pub(super) object_delete: u32,
    pub(super) object_delete_dynamic: u32,
    pub(super) object_keys: u32,
    pub(super) object_values: u32,
    pub(super) object_entries: u32,
    pub(super) object_has_property: u32,
    pub(super) object_assign: u32,
    // Phase 1: Array operations
    pub(super) array_new: u32,
    pub(super) array_push: u32,
    pub(super) array_pop: u32,
    pub(super) array_get: u32,
    pub(super) array_set: u32,
    pub(super) array_length: u32,
    pub(super) array_slice: u32,
    pub(super) array_splice: u32,
    pub(super) array_shift: u32,
    pub(super) array_unshift: u32,
    pub(super) array_join: u32,
    pub(super) array_index_of: u32,
    pub(super) array_includes: u32,
    pub(super) array_concat: u32,
    pub(super) array_reverse: u32,
    pub(super) array_flat: u32,
    pub(super) array_is_array: u32,
    pub(super) array_from: u32,
    pub(super) array_push_spread: u32,
    // Phase 1: String methods
    pub(super) string_char_at: u32,
    pub(super) string_substring: u32,
    pub(super) string_index_of: u32,
    pub(super) string_slice: u32,
    pub(super) string_to_lower_case: u32,
    pub(super) string_to_upper_case: u32,
    pub(super) string_trim: u32,
    pub(super) string_includes: u32,
    pub(super) string_starts_with: u32,
    pub(super) string_ends_with: u32,
    pub(super) string_replace: u32,
    pub(super) string_split: u32,
    pub(super) string_from_char_code: u32,
    pub(super) string_pad_start: u32,
    pub(super) string_pad_end: u32,
    pub(super) string_repeat: u32,
    pub(super) string_match: u32,
    pub(super) math_log2: u32,
    pub(super) math_log10: u32,
    // Phase 2: Closure operations
    pub(super) closure_new: u32,
    pub(super) closure_set_capture: u32,
    pub(super) closure_call_0: u32,
    pub(super) closure_call_1: u32,
    pub(super) closure_call_2: u32,
    pub(super) closure_call_3: u32,
    pub(super) closure_call_spread: u32,
    // Phase 2: Array higher-order methods
    pub(super) array_map: u32,
    pub(super) array_filter: u32,
    pub(super) array_for_each: u32,
    pub(super) array_reduce: u32,
    pub(super) array_find: u32,
    pub(super) array_find_index: u32,
    pub(super) array_sort: u32,
    pub(super) array_some: u32,
    pub(super) array_every: u32,
    // Phase 3: Class operations
    pub(super) class_new: u32,
    pub(super) class_set_method: u32,
    pub(super) class_call_method: u32,
    pub(super) class_get_field: u32,
    pub(super) class_set_field: u32,
    pub(super) class_set_static: u32,
    pub(super) class_get_static: u32,
    pub(super) class_instanceof: u32,
    // Phase 4: JSON
    pub(super) json_parse: u32,
    pub(super) json_stringify: u32,
    // Phase 4: Map
    pub(super) map_new: u32,
    pub(super) map_set: u32,
    pub(super) map_get: u32,
    pub(super) map_has: u32,
    pub(super) map_delete: u32,
    pub(super) map_size: u32,
    pub(super) map_clear: u32,
    pub(super) map_entries: u32,
    pub(super) map_keys: u32,
    pub(super) map_values: u32,
    // Phase 4: Set
    pub(super) set_new: u32,
    pub(super) set_new_from_array: u32,
    pub(super) set_add: u32,
    pub(super) set_has: u32,
    pub(super) set_delete: u32,
    pub(super) set_size: u32,
    pub(super) set_clear: u32,
    pub(super) set_values: u32,
    // Phase 4: Date
    pub(super) date_new: u32,
    pub(super) date_get_time: u32,
    pub(super) date_to_iso_string: u32,
    pub(super) date_get_full_year: u32,
    pub(super) date_get_month: u32,
    pub(super) date_get_date: u32,
    pub(super) date_get_day: u32,
    pub(super) date_get_hours: u32,
    pub(super) date_get_minutes: u32,
    pub(super) date_get_seconds: u32,
    pub(super) date_get_milliseconds: u32,
    // Phase 4: Error
    pub(super) error_new: u32,
    pub(super) error_message: u32,
    // Phase 4: RegExp
    pub(super) regexp_new: u32,
    pub(super) regexp_test: u32,
    // Phase 4: Globals
    pub(super) number_coerce: u32,
    pub(super) is_nan: u32,
    pub(super) is_finite: u32,
    // Phase 5: Misc
    pub(super) console_log_multi: u32,
    // Phase 1 addition: Class inheritance
    pub(super) class_set_parent: u32,
    // Phase 3: Try/Catch
    pub(super) try_start: u32,
    pub(super) try_end: u32,
    pub(super) throw_value: u32,
    pub(super) has_exception: u32,
    pub(super) get_exception: u32,
    // Phase 4: URL
    pub(super) url_parse: u32,
    pub(super) url_get_href: u32,
    pub(super) url_get_pathname: u32,
    pub(super) url_get_hostname: u32,
    pub(super) url_get_port: u32,
    pub(super) url_get_search: u32,
    pub(super) url_get_hash: u32,
    pub(super) url_get_origin: u32,
    pub(super) url_get_protocol: u32,
    pub(super) url_get_search_params: u32,
    pub(super) searchparams_get: u32,
    pub(super) searchparams_has: u32,
    pub(super) searchparams_set: u32,
    pub(super) searchparams_append: u32,
    pub(super) searchparams_delete: u32,
    pub(super) searchparams_to_string: u32,
    // Phase 4: Crypto
    pub(super) crypto_random_uuid: u32,
    pub(super) crypto_random_bytes: u32,
    // Phase 4: Path
    pub(super) path_join: u32,
    pub(super) path_dirname: u32,
    pub(super) path_basename: u32,
    pub(super) path_extname: u32,
    pub(super) path_resolve: u32,
    // Phase 4: Process/OS
    pub(super) os_platform: u32,
    pub(super) process_argv: u32,
    pub(super) process_cwd: u32,
    // Phase 6: Buffer
    pub(super) buffer_alloc: u32,
    pub(super) buffer_from_string: u32,
    pub(super) buffer_to_string: u32,
    pub(super) buffer_get: u32,
    pub(super) buffer_set: u32,
    pub(super) buffer_length: u32,
    pub(super) buffer_slice: u32,
    pub(super) buffer_concat: u32,
    pub(super) uint8array_new: u32,
    pub(super) uint8array_from: u32,
    pub(super) uint8array_length: u32,
    pub(super) uint8array_get: u32,
    pub(super) uint8array_set: u32,
    // Timers
    pub(super) set_timeout: u32,
    pub(super) set_interval: u32,
    pub(super) clear_timeout: u32,
    pub(super) clear_interval: u32,
    // Response properties
    pub(super) response_status: u32,
    pub(super) response_ok: u32,
    pub(super) response_headers_get: u32,
    pub(super) response_url: u32,
    // Buffer extras
    pub(super) buffer_copy: u32,
    pub(super) buffer_write: u32,
    pub(super) buffer_equals: u32,
    pub(super) buffer_is_buffer: u32,
    pub(super) buffer_byte_length: u32,
    // Crypto extras
    pub(super) crypto_sha256: u32,
    pub(super) crypto_md5: u32,
    // Path extras
    pub(super) path_is_absolute: u32,
    // Phase 5: Async/Promise/Fetch
    pub(super) fetch_url: u32,
    pub(super) fetch_with_options: u32,
    pub(super) response_json: u32,
    pub(super) response_text: u32,
    pub(super) promise_new: u32,
    pub(super) promise_resolve: u32,
    pub(super) promise_then: u32,
    pub(super) await_promise: u32,
    // Bridge via WASM memory — Firefox canonicalizes NaN in function params,
    // so we write f64 args to memory (preserves NaN bits) and pass only plain numbers.
    pub(super) mem_call: u32, // (func_name_id, arg_count) -> result; args at mem[ARG_BASE..]
    pub(super) mem_call_i32: u32, // (func_name_id, arg_count) -> i32; for is_truthy, string_eq, etc.
}
