#' @title Wrapper pour les calculs préparatifs
#'
#' @description Dieser Wrapper bündelt die vorbereitenden Berechnungen aller
#' Versicherungszweige, insbesondere die Abrechnungen, die Bevoelkerungsdaten,
#' die wirtschaftlichen Eckwerte, die Einkommensentwicklung, die Entwicklung der
#' Renten und den Diskontfaktor. Infolge der Annahme der STAF wurde der Bundes-
#' anteil, der Beitragssatz sowie das Demografieprozent vektorisiert. Im Zuge
#' der Covid-19 Pandemie wurde für den Zins und die übrigen Einnahmen Schock-
#' szenarien eingebaut. 
#'
#' @param tl_inp List of input data frames.
#'
#' @return a `tidylist` containing the following tidylists:
#' - `tl_abrechnung`
#' - `BEVOELKERUNG`
#' - `tl_eckwerte`
#' - `EINK_ENTWICKLUNG`
#' - `tl_rentenentwicklung`
#' - `ZINS`
#' - `tl_scenario_erstrente`
#' - `DISKONTFAKTOR`
#' - `tl_beitragssatz_vekt`
#' - `IV_SCHULD`
#'
#' @author [MAS BSV](mailto:sekretariat.mas@bsv.admin.ch)
#' 
#' @export

wrap_vorb_berechn <- function(tl_inp) {
    
    print("Run module: wrap_vorb_berechn")
    
  # Abrechnung
  tl_abrechnung <- mod_abrechnung(
      tl_inp,
      versicherung=c("ahv")
  )
  
  tl_inp$BEV_SCENARIO <- tl_inp$BEV_SCENARIO %>%
    filter(scenario == tl_inp$PARAM_GLOBAL$bev_scenario)

  # Mortalite
  tl_mortalite <- mod_mortalite(
        PARAM_GLOBAL = tl_inp$PARAM_GLOBAL,
        BEV_BESTAND = tl_inp$BEV_BESTAND,
        BEV_SCENARIO = tl_inp$BEV_SCENARIO
    )

  TAUX_MORTALITE <- tl_mortalite$TAUX_MORTALITE
  TAUX_MORTALITE_TOT <- tl_mortalite$TAUX_MORTALITE_TOT
  
  # Bevoelkerung
  BEVOELKERUNG <- mod_population(
        PARAM_GLOBAL = tl_inp$PARAM_GLOBAL,
        BEV_BESTAND = tl_inp$BEV_BESTAND,
        BEV_SCENARIO = tl_inp$BEV_SCENARIO
    )

  # Berechnung Eckwerte
  tl_eckwerte <- mod_eckwerte(
      PARAM_GLOBAL = tl_inp$PARAM_GLOBAL,
      ECKWERTE = tl_inp$ECKWERTE,
      LOHNINDEX = tl_inp$LOHNINDEX,
      PREISINDEX = tl_inp$PREISINDEX
  )
  
  # Berechnung Diskontfaktor
  
  DISKONTFAKTOR <- mod_diskontfaktor(
      PARAM_GLOBAL = tl_inp$PARAM_GLOBAL,
      ECKWERTE_EXTENDED = tl_eckwerte$ECKWERTE_EXTENDED
  )
  

  # Berechnung Rentenentwicklung gemaess Rentenanpassungen

  RENTENENTWICKLUNG <- mod_rentenentwicklung(
      PARAM_GLOBAL = tl_inp$PARAM_GLOBAL,
      ECKWERTE_EXTENDED = tl_eckwerte$ECKWERTE_EXTENDED,
      MINIMALRENTE = tl_inp$MINIMALRENTE,
      PREISINDEX = tl_inp$PREISINDEX
  )
  
  # Berechnung der nominellen Rendite auf den nichtfluessigen Fondsanlagen

  ZINS <- mod_zins(
      PARAM_GLOBAL = tl_inp$PARAM_GLOBAL,
      ZINS_RAW = tl_inp$ZINS_RAW,
      ECKWERTE_EXTENDED = tl_eckwerte$ECKWERTE_EXTENDED
  )

  # Berechnung der nominellen Rendite auf den nichtfluessigen Fondsanlagen
  
  IV_SCHULD <- mod_ivschuld_scen(
      PARAM_GLOBAL = tl_inp$PARAM_GLOBAL,
      IV_SCHULD_SCEN = tl_inp$IV_SCHULD_SCEN
  )
  
  
  # Calcul des scenario pour le parametre d'ajustement des premieres rentes

  RENTENZYKLUS <- mod_rentenzyklus(
    PARAM_GLOBAL      = tl_inp$PARAM_GLOBAL,
    RENTENENTWICKLUNG = RENTENENTWICKLUNG,
    RR_AVS            = tl_inp$RR_AVS,
    RR_AVS_ALLAGE     = tl_inp$RR_AVS_ALLAGE
  )


  # Berechnung Beitragssätze der Sozialversicherungen
  BEITRAGSSAETZE            <- mod_beitragssaetze(
      PARAM_GLOBAL       = tl_inp$PARAM_GLOBAL
      , SV_BEITRAGSSATZ    = tl_inp$SV_BEITRAGSSATZ
  )


      c(
          tl_abrechnung,
          tl_eckwerte,
          list(
              BEVOELKERUNG = BEVOELKERUNG,
              TAUX_MORTALITE = TAUX_MORTALITE,
              TAUX_MORTALITE_TOT = TAUX_MORTALITE_TOT,
              ZINS = ZINS,
              RENTENZYKLUS = RENTENZYKLUS,
              DISKONTFAKTOR = DISKONTFAKTOR,
              IV_SCHULD = IV_SCHULD,
              RENTENENTWICKLUNG = RENTENENTWICKLUNG,
              BEITRAGSSAETZE = BEITRAGSSAETZE
          )
      )
}
