# ====================================================================
#
# Copyright 2025, PBL Netherlands Environmental Assessment Agency
# See the copyright notice at the end of this file.
#
# ====================================================================


#12. Save species specific statistics 


SaveStats <- function(myRespName,SpeciesMetrics.dir, ObservationData, VariableImportance,CV_Evaluation_Data,MIV,ModelCorrectlyFinished,cutoff.ens){
  
  if (!file.exists(file.path(SpeciesMetrics.dir,paste0("metrics_", myRespName, ".csv")))){
    
    obs <- as.data.table(ObservationData[c("NPres_fit", "NPres_test", 
                                           "NAbs_GLM_GAM_fit", "NAbs_BRT_fit", 
                                           "NAbs_GLM_GAM_test")])
    
    if(ModelCorrectlyFinished == FALSE){
      
      column_names <- c(
        "MCC.GLM.cv", "TSS.GLM.cv", "ROC.GLM.cv",
        "MCC.GAM.cv", "TSS.GAM.cv", "ROC.GAM.cv",
        "MCC.BRT.cv", "TSS.BRT.cv", "ROC.BRT.cv",
        "MCC.ens.cv", "TSS.ens.cv", "ROC.ens.cv", 
        "cutoff_TSS", "cutoff_DSS", "cutoff_MCC", "cutoff_F",
        "Precipitation_MIV", 
        "TSUM_MIV", "TMIN_MIV","soil_clay_MIV", "soil_oc_MIV", "soil_silt_MIV",
        "soil_ph_MIV","soil_cec_MIV", "soil_bulk_MIV", "soil_coarse_MIV", 
        "salt_MIV","TWI_MIV",
        "Precipitation_GLM", "TSUM_GLM", "TMIN_GLM",
        "soil_clay_GLM", "soil_oc_GLM", "soil_silt_GLM", "soil_ph_GLM",
        "soil_cec_GLM", "soil_bulk_GLM", "soil_coarse_GLM", "salt_GLM",
        "TWI_GLM", "Precipitation_GAM", "TSUM_GAM", "TMIN_GAM",
        "soil_clay_GAM", "soil_oc_GAM", "soil_silt_GAM", "soil_ph_GAM",
        "soil_cec_GAM", "soil_bulk_GAM", "soil_coarse_GAM", "salt_GAM",
        "TWI_GAM", "Precipitation_GBM", "TSUM_GBM", "TMIN_GBM",
        "soil_clay_GBM", "soil_oc_GBM", "soil_silt_GBM", "soil_ph_GBM",
        "soil_cec_GBM", "soil_bulk_GBM", "soil_coarse_GBM", "salt_GBM",
        "TWI_GBM"
      )
      
      Dat <- data.table(matrix(NA,nrow=1,ncol = length(column_names)))
      setnames(Dat,column_names) 
      
      sp.output <- do.call(cbind, list(myRespName,obs,Dat))
      
    } else {
      
      VarImpDat <- as.data.table(VariableImportance$VarImpdt)
      CVDat <- as.data.table(CV_Evaluation_Data$CV_Eval_Stats)
      cutoff.ens <- as.data.table(cutoff.ens)
      
      
      if (MIVCalc == TRUE){
        
        MIVDat <- as.data.table(MIV$MIVdt)
        
      } else {
        col_name <- c("Species","Precipitation_MIV", "TSUM_MIV", "TMIN_MIV",
                      "soil_clay_MIV", "soil_oc_MIV", "soil_silt_MIV", "soil_ph_MIV",
                      "soil_cec_MIV", "soil_bulk_MIV", "soil_coarse_MIV", "salt_MIV",
                      "TWI_MIV")
        
        MIVDat <- data.table(matrix(NA, nrow = 1, ncol = length(col_name)))
        setnames(MIVDat,col_name)
        
      }
      
      sp.output <- do.call(cbind, list(myRespName,obs,CVDat[,-1],cutoff.ens,MIVDat[,-1],VarImpDat[,-1]))
      
      
    }
    
    new_column_names <- c("Species", names(sp.output)[-1])
    setnames(sp.output, new_column_names)
    write.csv(sp.output,
              file.path(SpeciesMetrics.dir,paste("metrics_", myRespName, ".csv",sep="")))
  
    
  } else {
    WriteLogFile(paste(user_dir,base_dir,species_out_dir, LogFile,sep="/"),
                 ln=paste0("Metrics file already exists for ", myRespName,"."))
  }
  
  # delete all intermediate results from hard drive
  i <- gsub(" ",".",myRespName)
  if(SaveIntRes == FALSE){ 
    unlink(file.path(user_dir,base_dir,species_out_dir,i),recursive = TRUE)
  }
    
}



# ====================================================================
#
# Copyright 2025, PBL Netherlands Environmental Assessment Agency
# 
# This source code of the BioScore model is owned by PBL Netherlands Environmental Assessment Agency. 
# It is not permitted to copy, redistribute, remix, transform, and build upon the material without written approval of PBL. 
# Permission for commercial purposes will not be granted. 
# This code is published to improve the transparency of the models used by PBL, 
# but without any warranty for fitness for any other purpose. 
# After approval of PBL to use the code, PBL will not provide any support.
#
# 
# ====================================================================

