#' @title Liechtestein Modell
#'
#' @description La 13e rente de vieillesse n'est versée qu'aux personnes 
#' qui ont droit à une rente de vieillesse en décembre. (Tiré du code de Jörg)
#'
#' @param RENTENENTWICKLUNG 
#' 
#' @param HIST_MORT_RENT data frame contenant Nombre de décès de retraités entre décembre 
#' de l'année précédente et l'année suivante au cours des cinq dernières années, 
#' ainsi que leurs pensions moyennes, séparément pour les domiciles nationaux et étrangers
#' \code{\link{mod_input_ahv_hist_mort_rent}}.
#'

#'
#' @param list `tidylist`. Elément obligatoire dans tous les modules. Au lieu de
#'   fournir des dataframes au module, il est possible de l'alimenter uniquement
#'   avec une`tidylist` qui contient les tidy dataframes. Tous les datframes
#'   listés doivent être présents dans la tidylist, avec le même nom. De plus,
#'   la `tidylist` peut aussi contenir des dataframes qui ne sont pas utilisés
#'   par le module.
#'
#'
#' @return une `tidylist` contenant le data frame suivant:
#'   - `DELTA_AUSG_LIECHTESTEIN`
#'
#' @export



mod_opt_ahv_liechtestein_modell <- function(tl_inp_massn) {
    
    print("Run module: mod_opt_ahv_liechtestein_modell")
  
    RENTENENTWICKLUNG <- tl_inp_massn$RENTENENTWICKLUNG
    HIST_MORT_RENT <- tl_inp_massn$HIST_MORT_RENT
    
  RENTENENTWICKLUNG <- RENTENENTWICKLUNG %>%
    select(jahr, minimalrente)
  
  AUSG_LIECHTESTEIN <-  HIST_MORT_RENT %>% 
    select(jahr = an_rr, dom = recoded_cdom, anzahl, rentensumme_dez) %>% 
    mutate(jahr = jahr + 1) %>%
    # Multiplication by '11/12' corrects for death count in the preceding december
    # (implicit assumption: uniform death rate over months and pension levels).
    summarise(rente_moyen = 11 / 12 * sum(rentensumme_dez) / sum(anzahl),
              anzahl = sum(anzahl), rentensumme_dez = sum(rentensumme_dez),
               .by = c("jahr", "dom")) %>%
    right_join(tibble(jahr = rep(2019:2040, each = 2), 
                      dom  = rep(c(100, 900), length(2019:2040)))) %>% 
    mutate(t = 0:(n() - 1)) %>%
    left_join(RENTENENTWICKLUNG , by = "jahr") %>%
    # left_join(DISKONTFAKTOR, by = "jahr") %>%
    # Express mean pensions as multiples of minimal rent.
    mutate(faktor_rente_moyen = rente_moyen / minimalrente) %>% 
    # Impute death counts and mean pensions linearly and separately by domicile.
    simputation::impute_lm(faktor_rente_moyen + anzahl ~ t | dom) %>% 
    # Express savings in millions.
    mutate(save = faktor_rente_moyen * anzahl * minimalrente / 10e5) %>% 
    dplyr::summarise(save_tot = sum(save), .by = "jahr") %>% 
    # filter(jahr >= 2024) %>% 
    mutate(save_rel = ifelse(jahr >= 2026, save_tot * (mean(1:11) / 12 - 1), 0),
           save_tot = ifelse(jahr >= 2026, save_tot                        , 0))

  
  DELTA_AUSG_LIECHTESTEIN <- AUSG_LIECHTESTEIN %>%
    dplyr::select(jahr, wert = save_rel)
  
  return(
      list(
          DELTA_AUSG_LIECHTESTEIN = DELTA_AUSG_LIECHTESTEIN
      )
  )
  
}
