#' @title  MWST fuer die AHV
#'
#' @description Prozentpunkt MWST fuer die AHV (Demographie Prozent)
#' Einfuerung in 1999, unbefristet
#'
#'
#' @param PARAM_GLOBAL a single row data frame, of which we use the following
#'   parameters:
#'   - `jahr_beginn`  : Erstes Jahr Berechnungen
#'   - `jahr_ende`    : Letztes Jahr der Projektionen
#'   - `jahr_abr`     : Abrechnungsjahr
#'   - `jahr_lj`      : Laufjahr
#'   - `version_estv` : Nummer der ESTV Lieferung innerhalb der Laufjahres
#'
#' @param AHV_ABRECHNUNG data frame containing btr_bund till jahr_abr, see
#' function \code{\link{mod_input_ahv_abrechnung}}.
#'
#' @param AHV_LOHNSUMME data frame containing the projected sum of revenues,
#' see function \code{\link{mod_beitragssumme}}.
#'
#' @param ESTV data frame containing the data about the VAT projections (ESTV),
#' see function \code{\link{mod_input_estv}}.

#' @return a `tidylist` containing the following tidy data frames:
#'   - `AHV_MWST`
#'
#' @author [MAS BSV](mailto:sekretariat.mas@bsv.admin.ch)
#'
#' @export

mod_ahv_mwst <- function(PARAM_GLOBAL,
                             AHV_ABRECHNUNG,
                             AHV_LOHNSUMME,
                             ESTV
                             ) {
    
    print("Run module: mod_ahv_mwst")
    

  # Mehrwertsteuerpunkt: ZAS AHV-Abrechnung hochgerechnet auf 1 Prozentpunkt

  MWST_ZAS <- data.frame(jahr = PARAM_GLOBAL$jahr_beginn:PARAM_GLOBAL$jahr_abr) %>%
    left_join(AHV_ABRECHNUNG, by = "jahr") %>%
    dplyr::select(jahr, btr_mwst) %>%
    mutate(mwst_pt = case_when(
      jahr < 2020 ~ btr_mwst/0.83,
      jahr >= 2024 ~ btr_mwst/1.4, 
      TRUE ~ btr_mwst
      ))
    

  # Mehrwertsteuerpunkt: ESTV Projektion
    MWST_ESTV <- ESTV %>%
        filter(idestv == PARAM_GLOBAL$id_estv) %>%
        filter(jahr > PARAM_GLOBAL$jahr_abr) %>%
        mutate(btr_mwst = btr_mwst * 1000000,
               mwst_pt = btr_mwst/pct_mwst) %>%
      select(jahr, btr_mwst, mwst_pt)
    
    
  jahr_estvmax <- max(MWST_ESTV$jahr)

  MWST <- bind_rows(MWST_ZAS, MWST_ESTV)

  # Projektion mit Lohnsumme

  PR <- MWST %>%
    filter(jahr == max(jahr)) %>%
    left_join(AHV_LOHNSUMME, by = "jahr") %>%
    mutate(scale_faktor = btr_mwst / ahv_lohnsumme) %>%
    dplyr::select(scale_faktor)

  MWST_PR <- AHV_LOHNSUMME %>%
    filter(jahr > max(MWST$jahr)) %>%
    mutate(scale_faktor = PR$scale_faktor) %>%
    mutate(btr_mwst = ahv_lohnsumme * scale_faktor) %>%
    dplyr::select(jahr, btr_mwst) %>%
    mutate(mwst_pt = btr_mwst/last(ESTV$pct_mwst))

  # Berechnung Mehrwertsteuerpunkt und Demographie Prozent

  AHV_MWST <- data.frame(jahr = PARAM_GLOBAL$jahr_beginn:last(MWST_ESTV$jahr)) %>%
    left_join(MWST, by = "jahr") %>%
    full_join(MWST_PR) 
 
  # --- Output -----------------------------------------------------------------

  return(AHV_MWST = AHV_MWST)
}
