
#' Labeling Kategori Data Sekolah TIMSS (Kelas 4)
#'
#' Mengonversi variabel numerik pada data konteks sekolah TIMSS 2023 Kelas 4
#' menjadi kategori berbahasa Indonesia agar interpretasi analisis lebih jelas.
#'
#' @param data data.frame/tibble berisi variabel-variabel sekolah TIMSS.
#'
#' @return data.frame/tibble yang berisi kolom-kolom kategori (berlabel Indonesia).
#'
#' @details Pelabelan mengikuti dokumentasi resmi TIMSS 2023.
#'
#' @examples
#' df <- data.frame(IDGRADE = c(3,4))
#' K4Sekolah(df)

K4Sekolah <- function(data) {

  if (!is.data.frame(data)) {
    stop("Input harus berupa data.frame")
  }

  map_values <- function(x, map) {
    unname(map[as.character(x)])
  }

  # Ubah angka ke karakter
  if ("IDCNTRY" %in% names(data)) {
    data$IDCNTRY <- as.character(data$IDCNTRY)
  }

  if ("IDSCHOOL" %in% names(data)) {
    data$IDSCHOOL <- as.character(data$IDSCHOOL)
  }

  if ("LCID_CQ" %in% names(data)) {
    data$LCID_CQ <- as.character(data$LCID_CQ)
  }

  if ("JKCZONE" %in% names(data)) {
    data$JKCZONE <- as.character(data$JKCZONE)
  }

  if ("JKCREP" %in% names(data)) {
    data$JKCREP <- as.character(data$JKCREP)
  }

  if ("VERSION" %in% names(data)) {
    data$VERSION <- as.character(data$VERSION)
  }



  # Mapping
  maps <- list(
    IDPOP = c("1" = "Populasi 1", "2" = "Populasi 2"),

    IDGRADER = c("1" = "Tingkat rendah", "2" = "Tingkat tinggi"),

    IDGRADE = c("3"="Kelas 3","4"="Kelas 4","5"="Kelas 5","6"="Kelas 6"),

    ITLANG_CQ <- c(
      "1" = "Bahasa Inggris", "2" = "Bahasa Spanyol", "3" = "Bahasa Perancis", "4" = "Bahasa Afrika", "5" = "Bahasa Albania",
      "8" = "Bahasa Norwegia (Bokmal)",  "9" = "Bahasa Bulgaria",  "10" = "Bahasa Cina",   "11" = "Bahasa Denmark",  "12" = "Bahasa Belanda",
      "13" = "Bahasa Uzbek (Latin)",  "14" = "Bahasa Georgia",  "15" = "Bahasa Jerman",  "16" = "Bahasa Ibrani",  "17" = "Bahasa Hungaria",
      "20" = "Bahasa Italia",  "21" = "Bahasa Latvia",  "22" = "Bahasa Lithuania",  "23" = "Bahasa Makedonia",  "24" = "Bahasa Maori",
      "26" = "Bahasa Norwegia (Nynorsk)",  "27" = "Bahasa Polandia",  "28" = "Bahasa Rumania",  "29" = "Bahasa Rusia",  "30" = "Bahasa Slovakia",
      "32" = "Bahasa Swedia",  "33" = "Bahasa lainnya",  "34" = "Bahasa Ceko",  "35" = "Bahasa Turki",  "36" = "Bahasa Bosnia (Kiril)",
      "37" = "Bahasa Bosnia (Latin)",  "39" = "Bahasa Kazakhstan",  "41" = "Bahasa Irlandia",  "43" = "Bahasa Finlandia",  "44" = "Bahasa Yunani",
      "45" = "Bahasa Portugal",  "47" = "Bahasa Korea",  "48" = "Bahasa Malta",  "49" = "Bahasa Catalan",  "51" = "Bahasa Basque",
      "52" = "Bahasa Valensia",  "53" = "Bahasa Arab",  "54" = "Bahasa Armenia",  "55" = "Bahasa Azerbaijan",  "56" = "Bahasa Kroasia",
      "57" = "Bahasa Galisia",  "58" = "Bahasa Jepang",  "59" = "Bahasa Malaysia",  "60" = "Bahasa Azerbaijan (Latin)",  "61" = "Bahasa Tamil",
      "63" = "Bahasa Persia",  "66" = "Bahasa Tatar",  "67" = "Bahasa Montenegro (Kiril)",  "68" = "Bahasa Montenegro (Latin)",  "69" = "Bahasa Serbia (Kiril)",
      "70" = "Bahasa Serbia (Latin)",  "72" = "Bahasa Uzbekistan (Kiril)",  "73" = "Bahasa Karakalpa",  "79" = "Bahasa Slovenia", "80" = "Bahasa Urdu",
      "81" = "Bahasa Sindhi",  "91" = "Bahasa Badini",  "92" = "Bahasa Sorani"
    ),

    ACBG03A <- c("1" = "0-10 persen","2" = "11-25 persen","3" = "26-50 persen","4" = "Lebih dari 50 persen"),

    ACBG03B <- c("1" = "0-10 persen","2" = "11-25 persen","3" = "26-50 persen","4" = "Lebih dari 50 persen"),

    ACBG04 <- c("1" = "Lebih dari 90 persen", "2" = "76-90 persen", "3" = "51-75 persen", "4" = "26-50 persen", "5" = "25 persen atau kurang"),

    ACBG05A <- c("1" = "Lebih dari 500.000 orang", "2" = "100.001-500.000 orang",
                 "3" = "50.001-100.000 orang", "4" = "30.001-50.000 orang",
                 "5" = "15.001-30.000 orang", "6" = "3.001-15.000 orang",
                 "7" = "3.000 orang atau kurang"),

    ACBG05B <- c(
      "1" = "Perkotaan - sangat padat penduduk", "2" = "Pinggiran kota - di tepi atau luar kawasan perkotaan",
      "3" = "Kota sedang atau kota besar tingkat kabupaten", "4" = "Kota kecil atau desa",
      "5" = "Pedesaan terpencil"
    ),

    ACBG06C <- c("1" = "6 hari", "2" = "5.5 hari", "3" = "5 hari", "4" = "4.5 hari", "5" = "4 hari", "6" = "Lainnya"),

    ACBG08 <- c("1" = "Ya", "2" = "Tidak"),

    ACBG09 <- c("1" = "Ya", "2" = "Tidak"),

    ACBG10A <- c("1" = "Ya", "2" = "Tidak"),

    ACBG10B <- c("1" = "Ya", "2" = "Tidak"),

    ACBG11AA <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11AB <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11AC <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11AD <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11AE <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11AF <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11AG <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11AH <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11AI <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11BA <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11BB <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11BC <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11BD <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11BE <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11CA <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11CB <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11CC <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG11CD <- c("1" = "Tidak sama sekali", "2" = "Sedikit", "3" = "Cukup","4" = "Sangat banyak"),

    ACBG12A <- c("1" = "Sangat tinggi", "2" = "Tinggi", "3" = "Sedang", "4" = "Rendah", "5" = "Sangat rendah"),

    ACBG12B <- c("1" = "Sangat tinggi", "2" = "Tinggi", "3" = "Sedang", "4" = "Rendah", "5" = "Sangat rendah"),

    ACBG12C <- c("1" = "Sangat tinggi", "2" = "Tinggi", "3" = "Sedang", "4" = "Rendah", "5" = "Sangat rendah"),

    ACBG12D <- c("1" = "Sangat tinggi", "2" = "Tinggi", "3" = "Sedang", "4" = "Rendah", "5" = "Sangat rendah"),

    ACBG12E <- c("1" = "Sangat tinggi", "2" = "Tinggi", "3" = "Sedang", "4" = "Rendah", "5" = "Sangat rendah"),

    ACBG12F <- c("1" = "Sangat tinggi", "2" = "Tinggi", "3" = "Sedang", "4" = "Rendah", "5" = "Sangat rendah"),

    ACBG12G <- c("1" = "Sangat tinggi", "2" = "Tinggi", "3" = "Sedang", "4" = "Rendah", "5" = "Sangat rendah"),

    ACBG12H <- c("1" = "Sangat tinggi", "2" = "Tinggi", "3" = "Sedang", "4" = "Rendah", "5" = "Sangat rendah"),

    ACBG12I <- c("1" = "Sangat tinggi", "2" = "Tinggi", "3" = "Sedang", "4" = "Rendah", "5" = "Sangat rendah"),

    ACBG12J <- c("1" = "Sangat tinggi", "2" = "Tinggi", "3" = "Sedang", "4" = "Rendah", "5" = "Sangat rendah"),

    ACBG12K <- c("1" = "Sangat tinggi", "2" = "Tinggi", "3" = "Sedang", "4" = "Rendah", "5" = "Sangat rendah"),

    ACBG13A <- c("1" = "Sangat setuju", "2" = "Agak setuju", "3" = "Agak tidak setuju", "4" = "Sangat tidak setuju"),

    ACBG13B <- c("1" = "Sangat setuju", "2" = "Agak setuju", "3" = "Agak tidak setuju", "4" = "Sangat tidak setuju"),

    ACBG13C <- c("1" = "Sangat setuju", "2" = "Agak setuju", "3" = "Agak tidak setuju", "4" = "Sangat tidak setuju"),

    ACBG13D <- c("1" = "Sangat setuju", "2" = "Agak setuju", "3" = "Agak tidak setuju", "4" = "Sangat tidak setuju"),

    ACBG13E <- c("1" = "Sangat setuju", "2" = "Agak setuju", "3" = "Agak tidak setuju", "4" = "Sangat tidak setuju"),

    ACBG13F <- c("1" = "Sangat setuju", "2" = "Agak setuju", "3" = "Agak tidak setuju", "4" = "Sangat tidak setuju"),

    ACBG13G <- c("1" = "Sangat setuju", "2" = "Agak setuju", "3" = "Agak tidak setuju", "4" = "Sangat tidak setuju"),

    ACBG13H <- c("1" = "Sangat setuju", "2" = "Agak setuju", "3" = "Agak tidak setuju", "4" = "Sangat tidak setuju"),

    ACBG14A <- c("1" = "Bukan masalah", "2" = "Masalah kecil", "3" = "Masalah sedang", "4" = "Masalah serius"),

    ACBG14B <- c("1" = "Bukan masalah", "2" = "Masalah kecil", "3" = "Masalah sedang", "4" = "Masalah serius"),

    ACBG14C <- c("1" = "Bukan masalah", "2" = "Masalah kecil", "3" = "Masalah sedang", "4" = "Masalah serius"),

    ACBG14D <- c("1" = "Bukan masalah", "2" = "Masalah kecil", "3" = "Masalah sedang", "4" = "Masalah serius"),

    ACBG14E <- c("1" = "Bukan masalah", "2" = "Masalah kecil", "3" = "Masalah sedang", "4" = "Masalah serius"),

    ACBG14F <- c("1" = "Bukan masalah", "2" = "Masalah kecil", "3" = "Masalah sedang", "4" = "Masalah serius"),

    ACBG14G <- c("1" = "Bukan masalah", "2" = "Masalah kecil", "3" = "Masalah sedang", "4" = "Masalah serius"),

    ACBG14H <- c("1" = "Bukan masalah", "2" = "Masalah kecil", "3" = "Masalah sedang", "4" = "Masalah serius"),

    ACBG14I <- c("1" = "Bukan masalah", "2" = "Masalah kecil", "3" = "Masalah sedang", "4" = "Masalah serius"),

    ACBG14J <- c("1" = "Bukan masalah", "2" = "Masalah kecil", "3" = "Masalah sedang", "4" = "Masalah serius"),

    ACBG15A <- c("1" = "Bukan masalah", "2" = "Masalah kecil", "3" = "Masalah sedang", "4" = "Masalah serius"),

    ACBG15B <- c("1" = "Bukan masalah", "2" = "Masalah kecil", "3" = "Masalah sedang", "4" = "Masalah serius"),

    ACBG16A <- c("1" = "Kurang dari 25 persen", "2" = "25-50 persen", "3" = "51-75 persen", "4" = "Lebih dari 75 persen"),

    ACBG16B <- c("1" = "Kurang dari 25 persen", "2" = "25-50 persen", "3" = "51-75 persen", "4" = "Lebih dari 75 persen"),

    ACBG16C <- c("1" = "Kurang dari 25 persen", "2" = "25-50 persen", "3" = "51-75 persen", "4" = "Lebih dari 75 persen"),

    ACBG16D <- c("1" = "Kurang dari 25 persen", "2" = "25-50 persen", "3" = "51-75 persen", "4" = "Lebih dari 75 persen"),

    ACBG16E <- c("1" = "Kurang dari 25 persen", "2" = "25-50 persen", "3" = "51-75 persen", "4" = "Lebih dari 75 persen"),

    ACBG16F <- c("1" = "Kurang dari 25 persen", "2" = "25-50 persen", "3" = "51-75 persen", "4" = "Lebih dari 75 persen"),

    ACBG16G <- c("1" = "Kurang dari 25 persen", "2" = "25-50 persen", "3" = "51-75 persen", "4" = "Lebih dari 75 persen"),

    ACBG16H <- c("1" = "Kurang dari 25 persen", "2" = "25-50 persen", "3" = "51-75 persen", "4" = "Lebih dari 75 persen"),

    ACBG16I <- c("1" = "Kurang dari 25 persen", "2" = "25-50 persen", "3" = "51-75 persen", "4" = "Lebih dari 75 persen"),

    ACBG16J <- c("1" = "Kurang dari 25 persen", "2" = "25-50 persen", "3" = "51-75 persen", "4" = "Lebih dari 75 persen"),

    ACBG16K <- c("1" = "Kurang dari 25 persen", "2" = "25-50 persen", "3" = "51-75 persen", "4" = "Lebih dari 75 persen"),

    ACBG16L <- c("1" = "Kurang dari 25 persen", "2" = "25-50 persen", "3" = "51-75 persen", "4" = "Lebih dari 75 persen"),

    ACBG19 <- c("1" = "Tidak menyelesaikan Sarjana atau setara (ISCED Level 6)", "2" = "Sarjana atau setara (ISCED Level 6)",
                "3" = "Magister atau setara (ISCED Level 7)", "4" = "Doktor atau setara (ISCED Level 8)"),

    ACBG20A <- c("1" = "Ya", "2" = "Tidak"),

    ACBG20B <- c("1" = "Ya", "2" = "Tidak"),

    ACBG20C <- c("1" = "Ya", "2" = "Tidak"),

    ACBG21A <- c("1" = "Sekolah tidak sepenuhnya ditutup", "2" = "Kurang dari 1 bulan",
                 "3" = "1 sampai 3 bulan", "4" = "4 sampai 6 bulan", "5" = "Lebih dari 6 bulan"),

    ACBG21B <- c("1" = "Sekolah tidak sepenuhnya ditutup", "2" = "Kurang dari 1 bulan",
                 "3" = "1 sampai 3 bulan", "4" = "4 sampai 6 bulan", "5" = "Lebih dari 6 bulan"),

    ACBG21C <- c("1" = "Sekolah tidak sepenuhnya ditutup", "2" = "Kurang dari 1 bulan",
                 "3" = "1 sampai 3 bulan", "4" = "4 sampai 6 bulan", "5" = "Lebih dari 6 bulan"),

    ACBG21D <- c("1" = "Sekolah tidak sepenuhnya ditutup", "2" = "Kurang dari 1 bulan",
                 "3" = "1 sampai 3 bulan", "4" = "4 sampai 6 bulan", "5" = "Lebih dari 6 bulan"),

    ACDGMRS <- c("1" = "Tidak terdampak", "2" = "Agak terdampak", "3" = "Sangat terdampak"),

    ACDGSRS <- c("1" = "Tidak terdampak", "2" = "Agak terdampak", "3" = "Sangat terdampak"),

    ACDGEAS <- c("1" = "Penekanan sangat tinggi", "2" = "Penekanan tinggi", "3" = "Penekanan sedang"),

    ACDGDAS <- c("1" = "Hampir tidak ada masalah", "2" = "Masalah kecil", "3" = "Masalah sedang hingga berat"),

    ACDGLNS <- c("1" = "Lebih dari 75 persen dimulai dengan keterampilan", "2" = "25-75 persen dimulai dengan keterampilan", "3" = "Kurang dari 25 persen dimulai dengan keterampilan"),

    ACDGSBC <- c("1" = "Lebih sejahtera", "2" = "Tidak lebih sejahtera maupun lebih kurang beruntung", "3" = "Lebih kurang beruntung"),

    SCOPE <- c("1" = "Berkas untuk penggunaan publik (PUF)", "2" = "Berkas dengan akses terbatas (RUF)")
      )

  # Apply mapping otomatis
  for (var in names(maps)) {
    if (var %in% names(data)) {
      data[[var]] <- map_values(data[[var]], maps[[var]])
    }
  }

  return(data)
}


