Harmonize ETA logging

Change-Id: I64e330f2e80cfdc21699f790877af21fdd23f7f2
diff --git a/R/KorAPQuery.R b/R/KorAPQuery.R
index 5abd281..805d7d7 100644
--- a/R/KorAPQuery.R
+++ b/R/KorAPQuery.R
@@ -266,6 +266,20 @@
               log_info(verbose, ", took ", res$meta$benchmark)
             }
           }
+
+          # Calculate and display ETA information on the same line if verbose and we have more than one query
+          if (verbose && total_queries > 1) {
+            eta_info <- calculate_eta(current_query, total_queries, start_time)
+            if (eta_info != "") {
+              elapsed_time <- as.numeric(difftime(Sys.time(), start_time, units = "secs"))
+              avg_time_per_query <- elapsed_time / current_query
+
+              # Add ETA info to the same line - remove the leading ". " for cleaner formatting
+              clean_eta_info <- sub("^\\. ", ". ", eta_info)
+              log_info(verbose, clean_eta_info)
+            }
+          }
+
           log_info(verbose, "\n")
         }
 
@@ -277,29 +291,6 @@
           stringsAsFactors = FALSE
         )
 
-        # Calculate and display ETA information if verbose and we have more than one query
-        if (verbose && total_queries > 1) {
-          eta_info <- calculate_eta(current_query, total_queries, start_time)
-          if (eta_info != "") {
-            elapsed_time <- as.numeric(difftime(Sys.time(), start_time, units = "secs"))
-            avg_time_per_query <- elapsed_time / current_query
-
-            # Create progress display
-            progress_display <- paste0(
-              "Query ",
-              sprintf(paste0("%", nchar(total_queries), "d"), current_query),
-              "/",
-              sprintf("%d", total_queries),
-              " completed. Avg: ",
-              sprintf("%.1f", avg_time_per_query),
-              "s/query",
-              eta_info
-            )
-
-            log_info(verbose, progress_display, "\n")
-          }
-        }
-
         return(result)
       })
 
@@ -568,9 +559,9 @@
     } else {
       total_pages
     }
-    
+
     eta_info <- calculate_eta(current_page, total_pages_to_fetch, start_time)
-    
+
     # Extract timing information for display
     time_per_page <- NA
     if (!is.null(res$meta$benchmark) && is.character(res$meta$benchmark)) {
diff --git a/R/logging.R b/R/logging.R
index 47c7ed5..fb1dc98 100644
--- a/R/logging.R
+++ b/R/logging.R
@@ -90,31 +90,31 @@
 #' @param window_size number of recent non-cached times to use for median calculation (default: 5)
 #' @return list with eta_seconds, estimated_completion_time, and is_cached flag
 #' @keywords internal
-calculate_sophisticated_eta <- function(individual_times, current_item, total_items, 
+calculate_sophisticated_eta <- function(individual_times, current_item, total_items,
                                        cache_threshold = 0.1, window_size = 5) {
   if (current_item < 2) {
     return(list(eta_seconds = NA, estimated_completion_time = NA, is_cached = FALSE))
   }
-  
+
   # Get times up to current item
   current_times <- individual_times[1:current_item]
   current_time <- individual_times[current_item]
   is_cached <- current_time < cache_threshold
-  
+
   # Use recent non-cached times for better ETA estimates
   # Exclude very fast responses as likely cached
   non_cached_times <- current_times[current_times >= cache_threshold]
-  
+
   if (length(non_cached_times) >= 1) {
     # Use median of recent non-cached times for more stable estimates
     recent_window <- min(window_size, length(non_cached_times))
     recent_times <- tail(non_cached_times, recent_window)
     time_per_item <- median(recent_times)
-    
+
     remaining_items <- total_items - current_item
     eta_seconds <- time_per_item * remaining_items
     estimated_completion_time <- Sys.time() + eta_seconds
-    
+
     return(list(
       eta_seconds = eta_seconds,
       estimated_completion_time = estimated_completion_time,
@@ -138,9 +138,9 @@
   if (is.na(eta_seconds) || is.na(estimated_completion_time)) {
     return("")
   }
-  
+
   completion_time_str <- format(estimated_completion_time, "%Y-%m-%d %H:%M:%S")
-  paste0(", ETA: ", format_duration(eta_seconds), " (", completion_time_str, ")")
+  paste0(". ETA: ", format_duration(eta_seconds), " (", completion_time_str, ")")
 }
 
 #' Get cache indicator string