test_that("int_plot_html basic functionality works", {
  data("ex_survey", package = "saros")

  # Test basic functionality without independent variable
  result <- saros::makeme(
    data = ex_survey,
    dep = c_1,
    type = "int_plot_html"
  )

  expect_s3_class(result, "ggplot")
  expect_true("GeomViolin" %in% class(result$layers[[1]]$geom))
  expect_true("GeomBoxplot" %in% class(result$layers[[2]]$geom))
})

test_that("int_plot_html with single dependent variable", {
  vdiffr::expect_doppelganger(title = "int_plot_html single dep variable", fig = {
    saros::makeme(
      data = saros::ex_survey,
      dep = c_1,
      type = "int_plot_html"
    )
  })
})

test_that("int_plot_html with multiple dependent variables", {
  vdiffr::expect_doppelganger(title = "int_plot_html multiple dep variables", fig = {
    saros::makeme(
      data = saros::ex_survey,
      dep = c_1:c_2,
      type = "int_plot_html"
    )
  })
})

test_that("int_plot_html with independent variable", {
  vdiffr::expect_doppelganger(title = "int_plot_html with indep variable", fig = {
    saros::makeme(
      data = saros::ex_survey,
      dep = c_1,
      indep = x1_sex,
      type = "int_plot_html"
    )
  })
})

test_that("int_plot_html with multiple dep and indep variables", {
  vdiffr::expect_doppelganger(title = "int_plot_html multiple dep with indep", fig = {
    saros::makeme(
      data = saros::ex_survey,
      dep = c_1:c_2,
      indep = x1_sex,
      type = "int_plot_html"
    )
  })
})

test_that("int_plot_html with inverse option", {
  vdiffr::expect_doppelganger(title = "int_plot_html with inverse=TRUE", fig = {
    saros::makeme(
      data = saros::ex_survey,
      dep = c_1:c_2,
      indep = x1_sex,
      type = "int_plot_html",
      inverse = TRUE
    )
  })
})

test_that("int_plot_html with vertical option", {
  vdiffr::expect_doppelganger(title = "int_plot_html with vertical=TRUE", fig = {
    saros::makeme(
      data = saros::ex_survey,
      dep = c_1:c_2,
      indep = x1_sex,
      type = "int_plot_html",
      vertical = TRUE
    )
  })
})

test_that("int_plot_html respects data with different distributions", {
  # Use only single variable to avoid "common categories" error with numeric data
  set.seed(123)
  test_data <- data.frame(
    var_normal = rnorm(300, mean = 20, sd = 5),
    group = rep(c("A", "B", "C"), each = 100)
  )

  vdiffr::expect_doppelganger(title = "int_plot_html diff_distributions", fig = {
    saros::makeme(
      data = test_data,
      dep = var_normal,
      indep = group,
      label_separator = NULL,
      type = "int_plot_html"
    )
  })
})

test_that("int_plot_html handles missing data correctly", {
  # Create test data with missing values
  test_data <- saros::ex_survey
  test_data$c_1[1:30] <- NA
  test_data$c_2[50:80] <- NA

  vdiffr::expect_doppelganger(title = "int_plot_html missing_data", fig = {
    saros::makeme(
      data = test_data,
      dep = c_1:c_2,
      indep = x1_sex,
      type = "int_plot_html"
    )
  })
})

test_that("int_plot_html with crowd functionality", {
  vdiffr::expect_doppelganger(title = "int_plot_html with crowd", fig = {
    saros::makeme(
      data = saros::ex_survey,
      dep = c_1:c_2,
      indep = x1_sex,
      type = "int_plot_html",
      crowd = c("target", "others"),
      mesos_var = "f_uni",
      mesos_group = "Uni of A"
    )
  })
})

test_that("int_plot_html with label customization", {
  vdiffr::expect_doppelganger(title = "int_plot_html with custom labels", fig = {
    saros::makeme(
      data = saros::ex_survey,
      dep = c_1:c_2,
      indep = x1_sex,
      type = "int_plot_html",
      x_axis_label_width = 15,
      strip_width = 20
    )
  })
})

test_that("int_plot_html error handling", {
  data("ex_survey", package = "saros")

  # Test with categorical variable (should error with type-variable mismatch)
  expect_error(
    saros::makeme(
      data = ex_survey,
      dep = a_1, # This is categorical - keep for error test
      type = "int_plot_html"
    ),
    regexp = "expects numeric variables"
  )

  # Test with mixed variable types - should error before reaching the statistics issue
  expect_error(
    saros::makeme(
      data = ex_survey,
      dep = c(c_1, a_1), # c_1 is numeric, a_1 is factor
      type = "int_plot_html"
    )
    # Don't specify regexp as error could occur at different stages
  )
})
