
# Funzione per calcolare le combo di AE eliminando tutte le combinazioni "impossibili" 
# direttamente dentro il ciclo di generazione delle combinazioni, evitando miliardi di somme inutili

make_combos_filtered <- function(DF) {
  cols <- colnames(DF)
  AEcombo_list <- list()
  
  for (k in seq_along(cols)) {
    cmbs <- combn(cols, k, simplify = FALSE)
    
    for (cmb in cmbs) {
      col_name <- paste(cmb, collapse = "_")
      
      ## === FILTRI INTEGRATI ===
      
      # deve contenere almeno un NR
      if (!any(grepl("NR", cmb))) next
      
      # non più di un NR
      if (sum(grepl("NR", cmb)) > 1) next
      
      # non più di un G
      if (sum(grepl("^G", cmb)) > 1) next
      
      # non più di uno SH
      if (sum(grepl("SH", cmb)) > 1) next
      
      # non più di uno SLE
      if (sum(grepl("SLE", cmb)) > 1) next
      
      # SH e SLE devono essere calcolati nello stesso modo (entrambi 1P o entrambi no)
      sh_num  <- ifelse(any(grepl("SH1P", cmb)), "1P", ifelse(any(grepl("SH", cmb)), "", NA))
      sle_num <- ifelse(any(grepl("SLE1P", cmb)), "1P", ifelse(any(grepl("SLE", cmb)), "", NA))
      if (!is.na(sh_num) && !is.na(sle_num) && sh_num != sle_num) next
      
      ## === SE PASSA I FILTRI, CALCOLA ===
      AEcombo_list[[col_name]] <- rowSums(DF[, cmb, drop = FALSE])
    }
  }
  as.data.frame(AEcombo_list)
}
