#' @title wrap_ahv_
#'
#' @description Ce wrapper calcule les resultats du container pour l'AVS
#'
#' @param tl_inp List of input data frames.
#'
#' @return Nothing.
#'
#' @export

#
wrap_ahv_ <- function(tl_inp, path) {
  
  print("Run module: wrap_ahv")
  
  # Vorbereitende Berechnungen
  
  tl_vorb_berechn <- wrap_vorb_berechn(tl_inp = tl_inp)
  
  # Hauptberechnung: Einnahmen und Ausgaben GO
  
  tl_hauptberechnung <- wrap_ahv_hauptberechnung(
    tl_inp = tl_inp,
    tl_vorb_berechn = tl_vorb_berechn
  )
  
  # Hauptberechnung: Einnahmen und Ausgaben Massnahmen
  
  if (tl_inp$PARAM_GLOBAL$flag_param_massn) {
    
    tl_ahv_massnahmen <- wrap_ahv_massnahmen(
      tl_inp = tl_inp,
      tl_inp_massnahmen = tl_inp,
      tl_vorb_berechn = tl_vorb_berechn,
      tl_hauptberechnung = tl_hauptberechnung,
      path
    )
    
    tl_hauptberechnung <- c(
      tl_ahv_massnahmen,
      tl_hauptberechnung[!(names(tl_hauptberechnung) %in%
                             # ne prendre que les data frames qui sont dans
                             # tl_hauptberechnung mais pas dans
                             # tl_ahv_massnahmen (p.ex. AHV_RENTENSUMME,...)
                             names(tl_ahv_massnahmen))]
    )
    
  } else {
    
    # Dummy data frame
    tl_hauptberechnung$AHV_MASSNAHMEN <- tibble(
      tl_inp$PARAM_GLOBAL$flag_param_massn)
    
  }
  
  # Berechnung Umlageergebnis und Bilanz
  
  tl_out_ergebnisse <- wrap_ahv_ergebnisse(
    tl_inp,
    tl_hauptberechnung,
    tl_vorb_berechn
  )
  
  # # Exogenen Indikatoren
  EXOGENE_TABELLE <- mod_ahv_exogenen_indikatoren(
    PARAM_GLOBAL = tl_inp$PARAM_GLOBAL,
    ECKWERTE_SCENARIO = tl_vorb_berechn$ECKWERTE_SCENARIO,
    RENTENENTWICKLUNG = tl_vorb_berechn$RENTENENTWICKLUNG,
    BEV_SCENARIO = tl_inp$BEV_SCENARIO 
  )
  
  # Postprocessing
  
  tl_out_ahv_postprocessing <- mod_ahv_postprocessing(
    PARAM_GLOBAL = tl_inp$PARAM_GLOBAL,
    AHV_BILANZ = tl_out_ergebnisse$AHV_BILANZ,
    AHV_MASSNAHMEN = tl_hauptberechnung$AHV_MASSNAHMEN,
    RENTENENTWICKLUNG = tl_vorb_berechn$RENTENENTWICKLUNG,
    DISKONTFAKTOR = tl_vorb_berechn$DISKONTFAKTOR
  )
  
  
  # Output
  
  c(
    tl_hauptberechnung,
    tl_out_ergebnisse,
    tl_vorb_berechn,
    tl_out_ahv_postprocessing,
    # tl_ahv_vafp,
    list(
      EXOGENE_TABELLE = EXOGENE_TABELLE
    )
  )
}

#' @title wrap_ahv  (memoisiert)
#'
#' @param tl_inp input - container
#'
#' @export
wrap_ahv <- memoise::memoise(wrap_ahv_)
