# Tests for tf_ggplot axis labeling

test_that("simple tf aesthetic has meaningful axis labels", {
  skip_if_not_installed("ggplot2")
  skip_if_no_tf_ggplot()

  data <- data.frame(id = 1:2)
  data$curves <- tf_rgp(2, arg = seq(0, 1, length.out = 5))

  p <- tf_ggplot(data, aes(tf = curves)) + geom_line()
  built <- ggplot_build(p)

  # For simple column references, y-label should be the column name
  expect_equal(built$plot$labels$y, "curves")
  expect_equal(built$plot$labels$x, "curves.arg")
})

test_that("complex tf expression has meaningful axis labels", {
  skip_if_not_installed("ggplot2")
  skip_if_no_tf_ggplot()

  data <- data.frame(id = 1:2)
  data$func1 <- tf_rgp(2, arg = seq(0, 1, length.out = 5))
  data$func2 <- tf_rgp(2, arg = seq(0, 1, length.out = 5))

  p <- tf_ggplot(data, aes(tf = func1 + func2)) + geom_line()
  built <- ggplot_build(p)

  # For complex expressions, y-label should be the expression text
  expect_equal(built$plot$labels$y, "func1 + func2")
  expect_equal(built$plot$labels$x, "func1 + func2.arg")
})

test_that("nested tf expression has meaningful axis labels", {
  skip_if_not_installed("ggplot2")
  skip_if_no_tf_ggplot()

  data <- data.frame(id = 1:2)
  data$curves <- tf_rgp(2, arg = seq(-1, 1, length.out = 5))

  p <- tf_ggplot(data, aes(tf = abs(curves))) + geom_line()
  built <- ggplot_build(p)

  # For nested expressions, y-label should be the expression text
  expect_equal(built$plot$labels$y, "abs(curves)")
  expect_equal(built$plot$labels$x, "abs(curves).arg")
})

test_that("multiple tf expressions have distinct meaningful labels", {
  skip_if_not_installed("ggplot2")
  skip_if_no_tf_ggplot()

  data <- data.frame(id = 1:2)
  data$func1 <- tf_rgp(2, arg = seq(0, 1, length.out = 5))
  data$func2 <- tf_rgp(2, arg = seq(0, 1, length.out = 5))

  p <- tf_ggplot(data, aes(tf = func1 + func2)) +
    geom_line() +
    geom_line(aes(tf = func1), color = "red") +
    geom_line(aes(tf = func2), color = "blue")

  built <- ggplot_build(p)

  # Base plot should have the sum expression label
  expect_equal(built$plot$labels$y, "func1 + func2")

  # The transformed data should have columns for each expression with meaningful names
  data_cols <- names(built$data[[1]])
  # Should not have ugly .tf_expr_ names in the actual plot data
  expect_false(any(grepl("^\\.tf_expr_", data_cols)))
})
