#limpar o ambiente
rm(list = ls())
#Carregar/instalar pacotes necessários para a análise
pkgs <- c("dplyr","readr","tibble","fs","zoo","stringr","purrr","tools")
to_install <- pkgs[!pkgs %in% rownames(installed.packages())]
if (length(to_install)) install.packages(to_install, dependencies = TRUE)
invisible(lapply(pkgs, library, character.only = TRUE))

# pasta com os CSVs por indivíduo (renomeados)
pasta_renomeados <- "C:/Users/march/Downloads/Documents/resistógrafo/medicoes_cursoresis/csv_resistografocurso/renomeadoscursoresis"

# saídas - local dentro dos renomeados com uma nova pasta normalizados
pasta_out        <- fs::path(pasta_renomeados, "normalizadoscursoresis")
fs::dir_create(pasta_out)

#####Funções CMOVAVE e CMOVMIN 
# janelas iniciais
window_ma  <- 21   # para CMOVAVE (Sm_Amp)
window_cmm <- 51   # para CMOVMIN (Min_Amp)

#a janela criada deve ser ímpar para as funções funcionarem melhor, pois é mais fácil encontrar o centro, e maior que três para diminuir o ruído
ajusta_janela <- function(w) {
  w <- as.integer(w)              # garante que w seja número inteiro
  if (is.na(w) || w < 3) w <- 3   # se for NA ou menor que 3, define 3
  if (w %% 2 == 0) w <- w + 1     # se for par, soma 1 para ficar ímpar
  w                               # retorna a janela ajustada
}
window_ma <- ajusta_janela(window_ma) 
window_cmm <- ajusta_janela(window_cmm)

# aplicar as funções, x -dados de drill, k - janelas ímpares definidas no passo acima, FUN- função
roll_mean_c <- function(x, k) zoo::rollapply(x, width = k, FUN = mean, align = "center", fill = NA, na.rm = TRUE) #criar Sm_Amp
roll_min_c  <- function(x, k) zoo::rollapply(x, width = k, FUN = min,   align = "center", fill = NA, na.rm = TRUE) #criar Min_Amp

#normaliza entre 0 e 100 para facilitar comparações
norm_0_100 <- function(x) {
  rx <- range(x, na.rm = TRUE)
  if (!is.finite(rx[1]) || !is.finite(rx[2]) || diff(rx) == 0) return(rep(NA_real_, length(x)))
  100 * (x - rx[1]) / diff(rx)
}

#Entrada dos dados para normalizar
arquivos <- list.files(pasta_renomeados, pattern = "(?i)\\.csv$", full.names = TRUE)

for(arq in arquivos){
  cat("Processando:", basename(arq), "\n")
  
  df <- read_csv(arq, show_col_types = FALSE)
  
  # Verifica coluna Drill
  col_drill <- intersect(names(df), c("Drill","drill","Amplitude","amplitude","Amp","amp"))
  if(length(col_drill) == 0){
    message("❌ Nenhuma coluna Drill encontrada em: ", basename(arq))
    next
  }
  
  drill <- as.numeric(df[[col_drill[1]]])
  
  # Normaliza e suaviza
  df$Drill_norm <- norm_0_100(drill)
  df$Sm_Amp  <- roll_mean_c(df$Drill_norm, window_ma)
  df$Min_Amp <- roll_min_c(df$Drill_norm,  window_cmm)
  
  # Calcula Adj_Amp
  mean_Min <- mean(df$Min_Amp, na.rm = TRUE)
  df <- df %>%
    mutate(
      Adj_Amp = mean_Min + (Sm_Amp - Min_Amp)
    )
  
  # Salva CSV final
  nome_out <- fs::path(pasta_out, paste0(tools::file_path_sans_ext(basename(arq)), "_normalizado.csv"))
  write_csv(df, nome_out)
  cat("✅ Arquivo salvo em:", nome_out, "\n\n")
}

