# Tests para cie_table (tablas gt)

test_that("cie_table requiere gt instalado",
{
  skip_if_not_installed("gt")

  # Test basico con codigo valido
  tabla <- cie_table("E11")
  expect_s3_class(tabla, "gt_tbl")
})

test_that("cie_table funciona con multiples codigos", {
  skip_if_not_installed("gt")
  skip_on_cran()

  tabla <- cie_table(c("E11", "I10"))
  expect_s3_class(tabla, "gt_tbl")
})

test_that("cie_table maneja codigo invalido", {
  skip_if_not_installed("gt")
  skip_on_cran()

  # Codigo que no existe lanza error
  expect_error(cie_table("XXXXX"), "no encontrado")
})

# ============================================================
# PRUEBAS ADICIONALES cie_table()
# ============================================================

test_that("cie_table genera tabla gt correctamente", {
  skip_if_not_installed("gt")
  skip_on_cran()

  tabla <- cie_table("E11")
  expect_s3_class(tabla, "gt_tbl")
})

test_that("cie_table genera header correcto", {
  skip_if_not_installed("gt")
  skip_on_cran()

  tabla <- cie_table("E11")

  # Verificar que es objeto gt
  expect_s3_class(tabla, "gt_tbl")

  # gt tables tienen estructura interna que podemos verificar
  expect_true("_heading" %in% names(tabla))
})

test_that("cie_table funciona con codigo categoria", {
  skip_if_not_installed("gt")
  skip_on_cran()

  # Categoria sin punto (expande a todos los hijos)
  tabla <- cie_table("I10")
  expect_s3_class(tabla, "gt_tbl")
})

test_that("cie_table funciona con codigo especifico", {
  skip_if_not_installed("gt")
  skip_on_cran()

  # Codigo especifico con punto
  tabla <- cie_table("E11.0")
  expect_s3_class(tabla, "gt_tbl")
})

test_that("cie_table expande jerarquia automaticamente", {
  skip_if_not_installed("gt")
  skip_on_cran()

  # E11 debe expandir a E11.0, E11.1, etc.
  tabla <- cie_table("E11")

  # Verificar que tiene datos (no solo header)
  # El objeto gt tiene _data interno
  expect_true("_data" %in% names(tabla))
  expect_gt(nrow(tabla$`_data`), 1)
})

test_that("cie_table tiene columnas esperadas", {
  skip_if_not_installed("gt")
  skip_on_cran()

  tabla <- cie_table("E11.0")

  # Verificar columnas en los datos internos
  columnas_data <- names(tabla$`_data`)

  expect_true("codigo" %in% columnas_data)
  expect_true("descripcion" %in% columnas_data)
})

test_that("cie_table error sin gt instalado", {
  # Este test solo funciona si gt NO esta instalado
  skip_if(requireNamespace("gt", quietly = TRUE),
          "gt esta instalado")

  expect_error(
    cie_table("E11"),
    "gt"
  )
})
