// Docker command executor for native backend
// Uses @process.collect_output_merged

///|
/// Execute docker command using native process execution
#cfg(target="native")
pub async fn exec_docker(
  args : Array[String],
) -> Result[String, TestContainerError] noraise {
  let command = "docker"
  let (status, output) = @process.collect_output_merged(command, args) catch {
    e => {
      let error_msg = e.to_string()
      // Check if error indicates Docker CLI is not installed
      if error_msg.contains("No such file") ||
        error_msg.contains("not found") ||
        error_msg.contains("command not found") {
        return Err(
          DockerCommandFailed(
            "Docker CLI is not installed or not available in PATH.\n\nPlease install Docker to use this library:\n- macOS: https://docs.docker.com/desktop/install/mac-install/\n- Windows: https://docs.docker.com/desktop/install/windows-install/\n- Linux: https://docs.docker.com/desktop/install/linux-install/\n\nAfter installation, make sure 'docker' command is available in your PATH.",
          ),
        )
      }
      return Err(DockerCommandFailed(error_msg))
    }
  }
  let output_view = output.text() catch {
    e => return Err(DockerCommandFailed(e.to_string()))
  }
  // Convert StringView to String and trim
  let trimmed = output_view.trim()
  let output_str = "\{trimmed}"
  if status == 0 {
    Ok(output_str)
  } else {
    Err(DockerCommandFailed(output_str))
  }
}