library(ggplot2)
library(dplyr)
library(readr)
library(stringr)

# Usage: Rscript combined_comparison.r exp_abspath1 exp_abspath2 ... [resultsdata_file]
# One coordinate system per base experiment (facet); c/aot/interp variants
# share each facet, coloured by variant.

args <- commandArgs(trailingOnly = TRUE)
if (length(args) < 1) {
  stop("Need at least 1 experiment")
}

csv_suffix <- if (grepl("\\.csv$", args[length(args)])) {
  args[length(args)]
} else {
  "resultsdata.csv"
}
exp_args <- if (grepl("\\.csv$", args[length(args)])) {
  args[-length(args)]
} else {
  args
}

extract_info <- function(path) {
  dir_name <- basename(path)
  match <- str_match(
    dir_name,
    "^\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}_(.+?)_(c|aot|interp)_"
  )
  if (is.na(match[1, 1])) {
    warning(paste("Could not parse:", dir_name))
    return(NULL)
  }
  list(base_name = match[1, 2], variant = match[1, 3], path = path)
}

all_data <- data.frame()

for (arg in exp_args) {
  info <- extract_info(arg)
  if (is.null(info)) {
    next
  }

  csv_file <- file.path(info$path, csv_suffix)
  if (!file.exists(csv_file)) {
    warning(paste("Missing:", csv_file))
    next
  }

  df <- read_csv(csv_file, col_types = cols())
  df$base_name <- info$base_name
  df$variant <- info$variant
  all_data <- bind_rows(all_data, df)
}

if (nrow(all_data) == 0) {
  stop("No data loaded")
}

totals <- all_data |>
  group_by(base_name, variant, resulttype) |>
  summarise(faults = sum(faults, na.rm = TRUE), .groups = "drop") |>
  ungroup()

marker_order <- c(
  "OK_MARKER",
  "FAIL_MARKER",
  "DETECTED_MARKER",
  "TIMEOUT",
  "TRAP",
  "WRITE_TEXTSEGMENT",
  "ACCESS_OUTERSPACE",
  "GROUP1_MARKER"
)
totals$resulttype <- factor(totals$resulttype, levels = marker_order)

plot <- ggplot(
  totals,
  aes(x = resulttype, y = faults, colour = variant, group = variant)
) +
  geom_point(size = 2) +
  geom_line() +
  facet_wrap(~base_name) +
  scale_y_log10() +
  labs(
    x = "Fault Type",
    y = "Fault Count",
    title = "Fault Count Comparison",
    color = "Variant"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 90, hjust = 1),
    plot.title = element_text(size = 14, face = "bold")
  )

suffix <- gsub("^resultsdata|\\.csv$", "", csv_suffix)
outfile <- paste0("injections/fault_count_comparison", suffix, ".svg")
ggsave(outfile, plot = plot, width = 12, height = 6)
print(paste("Saved", outfile))
