#' @title Berechnung der AHV-Einnahmen
#'
#' @description Berechnet die Einnahmenkomponenten (MWST und Bundesbeitrag) der
#' AHV sowie die totale Einnahmensumme und die Lohnsumme.
#'
#' @param PARAM_GLOBAL a single row data frame, of which we use the following
#'   parameters:
#'   - `jahr_beginn`: Erstes Jahr der Berechnungen
#'   - `jahr_ende`: Letztes Jahr der Projektionen
#'
#' @param BEVOELKERUNG data frame containing the active population data, 
#' see function \code{\link{mod_population}}.
#'
#' @param IK data frame containing the individual accounts, see function
#' \code{\link{mod_input_ikregister}}.
#'
#' @param ESTV data frame containing the data about the VAT projections (ESTV),
#' see function \code{\link{mod_input_estv}}.
#'
#' @param RENTENENTWICKLUNG data frame containing the projected growth
#'   factor for the minimal benefits, see function
#'   \code{\link{mod_rentenentwicklung}}.
#'
#' @param AHV_ABRECHNUNG data frame containing regr_ein_tot, ein_uebr,
#' btr_bund till jahr_abr, see function \code{\link{mod_input_ahv_abrechnung}}.
#'
#' @param AHV_AUSGABEN data frame containing the projected aus_tot, see function
#' \code{\link{mod_ahv_ausgaben}}.
#'
#'
#' @param  BEITRAGSSAETZE  AHV-Beitragssatz
#'
#' @param  UEBR_EINN_SCEN_EXTENDED  Faktor fuer die uebrigen Einnahmen
#'
#' @return a `tidylist` containing the following tidy data frames:
#'   - `AHV_EINNAHMEN`
#'   - `AHV_LOHNSUMME`
#'   - `AHV_MWST`
#'   - `AHV_BUND`
#'   - `BEITRAGSSUMME_GRAFIK`
#'   - `D_IK_YEARS`
#'   - `D_IK`
#'
#' @author [MAS BSV](mailto:sekretariat.mas@bsv.admin.ch)
#'
#' @export

#
mod_ahv_einnahmen <- function(PARAM_GLOBAL,
                              BEVOELKERUNG,
                              BEV_BESTAND,
                              IK,
                              ECKWERTE_EXTENDED,
                              ECKWERTE_SCENARIO,
                              ESTV,
                              AHV_ABRECHNUNG,
                              AHV_AUSGABEN,
                              RENTENENTWICKLUNG,
                              BEITRAGSSAETZE,
                              ARBEITSLOSENQUOTE,
                              SPIELBANKEN,
                              MWST_SZENARIEN,
                              BIP_SZENARIEN_REAL
                              ) {

    print("Run module: mod_ahv_einnahmen")
    

  # Berechnen der Komponenten der AHV-Einnahmen --------------------------------

  # Beitragssumme

  tl_mod_beitragssumme <- mod_beitragssumme(
      PARAM_GLOBAL       = PARAM_GLOBAL
      , BEVOELKERUNG       = BEVOELKERUNG
      , BEV_BESTAND       = BEV_BESTAND
      , IK                 = IK
      , ECKWERTE_EXTENDED  = ECKWERTE_EXTENDED
      , ECKWERTE_SCENARIO  = ECKWERTE_SCENARIO
      , AHV_ABRECHNUNG = AHV_ABRECHNUNG
      , BEITRAGSSAETZE = BEITRAGSSAETZE
      , ARBEITSLOSENQUOTE = ARBEITSLOSENQUOTE
      , versicherung = "ahv"
      , ABRECHNUNG = AHV_ABRECHNUNG
  )

  # Ertrag MWST

      AHV_MWST <- mod_ahv_mwst(
        PARAM_GLOBAL = PARAM_GLOBAL,
        AHV_ABRECHNUNG = AHV_ABRECHNUNG,
        ESTV = ESTV,
        ECKWERTE_SCENARIO  = ECKWERTE_SCENARIO,
        MWST_SZENARIEN = MWST_SZENARIEN,
        BIP_SZENARIEN_REAL = BIP_SZENARIEN_REAL
      )

  # Bundesbeitrag

      AHV_BUND <- mod_ahv_bund(
        PARAM_GLOBAL = PARAM_GLOBAL,
        AHV_ABRECHNUNG = AHV_ABRECHNUNG,
        AHV_AUSGABEN = AHV_AUSGABEN
      )$AHV_BUND

  # Spielbankenertrag

  AHV_SPIELBANKEN <- mod_ahv_spielbanken(
    PARAM_GLOBAL = PARAM_GLOBAL,
    AHV_ABRECHNUNG = AHV_ABRECHNUNG,
    SPIELBANKEN = SPIELBANKEN
  )

  # Ertrag aus AHV-Regress und den uebrigen Einnahmen

  AHV_REGRESS <- mod_ahv_regress(
    PARAM_GLOBAL = PARAM_GLOBAL,
    AHV_ABRECHNUNG = AHV_ABRECHNUNG,
    RENTENENTWICKLUNG = RENTENENTWICKLUNG
  )

  # Zusammenfuehren der Einnahmenkomponenten und Berechnung des Totals

  AHV_EINNAHMEN <- data.frame(
    jahr = PARAM_GLOBAL$jahr_beginn:PARAM_GLOBAL$jahr_ende) %>%
    left_join(tl_mod_beitragssumme$LOHNSUMME, by = "jahr") %>%
    left_join(tl_mod_beitragssumme$BEITRAGSSUMME, by = "jahr") %>%
    left_join(AHV_MWST, by = "jahr") %>%
    left_join(AHV_BUND, by = "jahr") %>%
    left_join(AHV_SPIELBANKEN, by = "jahr") %>%
    left_join(AHV_REGRESS, by = "jahr") %>%
    mutate(btr_uebr = btr_sp_b + regr_ein_tot) %>%
    mutate(ein_total = btr_vs_ag + btr_mwst + btr_bund + btr_sp_b +
      regr_ein_tot)

  # Output ---------------------------------------------------------------------

  return(list(
      AHV_EINNAHMEN = AHV_EINNAHMEN,
      AHV_LOHNSUMME = tl_mod_beitragssumme$LOHNSUMME,
      STRUKTURFAKTOR = tl_mod_beitragssumme$STRUKTURFAKTOR,
      AHV_MWST = AHV_MWST,
      AHV_BUND = AHV_BUND
  ))
}
