#' Vorbereitung der Input Daten fuer alle mathprod Programme
#'
#' Einlesen und speichern der Input Data frames fuer alle mathprod Programme.
#'
#' @param path path to container
#'
#' @return nothing. Output (the input data) is stored in the assigned location
#'
#' @author [MAS BSV](mailto:sekretariat.mas@bsv.admin.ch)
#'
#' @export

prepare_input <- function(path) {
    
                        ###############################################
                        #### PFADE FÜR INPUTS UND OUTPUS DEFINIEREN ###
                        ###############################################
  
        # Parameter-File einlesen
        PARAM_INPUTS <- read_param(path)
        
        # Check the working directory and set the path based on the environment
        if (!grepl("^[A-Za-z]", getwd())) {
            # If the working directory doesn't start with a letter, assume Linux
            PARAM_INPUTS$raw_data <- "/data/appl-wb/01_raw_data"
        }
        
        # Pfade zu Input-Daten definieren
        PARAM_INPUTS$path_allgemein_go <- paste0(PARAM_INPUTS$raw_data,"/allgemein/go/")
        PARAM_INPUTS$path_allgemein_massnahmen <- paste0(PARAM_INPUTS$raw_data,"/allgemein/massnahmen/")
        
        PARAM_INPUTS$path_ahv_go <- paste0(PARAM_INPUTS$raw_data,"/ahv/go/")
        PARAM_INPUTS$path_ahv_massnahmen <- paste0(PARAM_INPUTS$raw_data,"/ahv/massnahmen/")
        PARAM_INPUTS$path_avh_hila <- paste0(PARAM_INPUTS$raw_data,"/ahv/massnahmen/hila")
        
        PARAM_INPUTS$path_iv_go <- paste0(PARAM_INPUTS$raw_data,"/iv/go/")
        PARAM_INPUTS$path_iv_massnahmen <- paste0(PARAM_INPUTS$raw_data,"/iv/massnahmen/")
        
        PARAM_INPUTS$path_eo_go <- paste0(PARAM_INPUTS$raw_data,"/eo/go/")
        PARAM_INPUTS$path_eo_massnahmen <- paste0(PARAM_INPUTS$raw_data,"/eo/massnahmen/")
        
        PARAM_INPUTS$path_el_go <- paste0(PARAM_INPUTS$raw_data,"/el/go/")
        PARAM_INPUTS$path_el_massnahmen <- paste0(PARAM_INPUTS$raw_data,"/el/massnahmen/")
        
        PARAM_INPUTS$path_ul_go <- paste0(PARAM_INPUTS$raw_data,"/ul/go/")
        PARAM_INPUTS$path_ul_massnahmen <- paste0(PARAM_INPUTS$raw_data,"/ul/massnahmen/")    
        
        PARAM_INPUTS$path_rententab <- paste0(PARAM_INPUTS$raw_data,"/rententab")
        
        PARAM_INPUTS$path_beitragstab <- paste0(PARAM_INPUTS$raw_data,"/beitragstab")
        
        PARAM_INPUTS$path_eotab <- paste0(PARAM_INPUTS$raw_data,"/eotab")
    
        # Input-Ordner vorbereiten
        path_out = file.path(dirname(path))
        
        inp_path_allgemein_go <- file.path(path_out, "allgemein", "go")
        inp_path_allgemein_massnahmen <- file.path(path_out, "allgemein", "massnahmen")
        
        inp_path_ahv_go <- file.path(path_out, "ahv", "go")
        inp_path_ahv_massnahmen <- file.path(path_out, "ahv", "massnahmen")
        
        inp_path_iv_go <- file.path(path_out, "iv", "go")
        inp_path_iv_massnahmen <- file.path(path_out, "iv", "massnahmen")
        
        inp_path_eo_go <- file.path(path_out, "eo", "go")
        inp_path_eo_massnahmen <- file.path(path_out, "eo", "massnahmen")
        
        inp_path_el_go <- file.path(path_out, "el", "go")
        inp_path_el_massnahmen <- file.path(path_out, "el", "massnahmen")
        
        inp_path_ul_go <- file.path(path_out, "ul", "go")
        inp_path_ul_massnahmen <- file.path(path_out, "ul", "massnahmen")
        
        inp_path_rententab <- file.path(path_out, "rententab")
        
        inp_path_beitragstab <- file.path(path_out, "beitragstab")
        
        inp_path_eotab <- file.path(path_out, "eotab")
        
        ensure_path <- function(path) {
        # do not allow overwriting
        if (file.exists(path)) stop(path, "already exists")
        if (!file.exists(path)) {
          dir.create(path, recursive = TRUE)
        }
        }
        
        ensure_path(inp_path_allgemein_go)
        ensure_path(inp_path_allgemein_massnahmen)
        
        ensure_path(inp_path_ahv_go)
        ensure_path(inp_path_ahv_massnahmen)
        
        ensure_path(inp_path_iv_go)
        ensure_path(inp_path_iv_massnahmen)
        
        ensure_path(inp_path_eo_go)
        ensure_path(inp_path_eo_massnahmen)
        
        ensure_path(inp_path_el_go)
        ensure_path(inp_path_el_massnahmen)
        
        ensure_path(inp_path_ul_go)
        ensure_path(inp_path_ul_massnahmen)
        
        ensure_path(inp_path_rententab)
        
        ensure_path(inp_path_beitragstab)
        
        ensure_path(inp_path_eotab)

    
    
    
                                #######################################
                                #### ALLGEMEINE INPUTDATEN EINLESEN ###
                                #######################################
    
     ### GELTENDE ORDNUNG ALLGEMEIN (=Dataframe von mehr als einer Versicherung genutzt) ###
    
        # Input AHV Abrechnungsdaten (wird von IV und EO für Schätzung Lohnbeiträge benötigt)
        tl_input_ahv_abrechnung <- mod_input_ahv_abrechnung(PARAM_INPUTS = PARAM_INPUTS)        

        # Input Bestandesdaten Bevölkerung
        BEV_BESTAND <- mod_input_bev_bestand(PARAM_INPUTS = PARAM_INPUTS)
        
        # Input Szenariodaten Bevölkerung
        BEV_SCENARIO <- mod_input_bev_scenario(PARAM_INPUTS = PARAM_INPUTS)
        
        # Input IK-Daten
        IK <- mod_input_ikregister(PARAM_INPUTS = PARAM_INPUTS)
        
        # Input Rentenregister RR
        RR_AVS <- mod_input_rr_avs_dataframe(PARAM_INPUTS = PARAM_INPUTS)
        
        # Beitragssätze aller Versicherungen
        SV_BEITRAGSSATZ <- mod_input_sv_beitragssatz(PARAM_INPUTS)
        
        # Input Lohnindex historique
        LOHNINDEX <- mod_input_li(PARAM_INPUTS = PARAM_INPUTS)
        
        # Input Preisindex
        PREISINDEX <- read_delim(file.path(PARAM_INPUTS$path_allgemein_go, PARAM_INPUTS$file_preisindex), delim  = ";", show_col_types = FALSE, trim_ws = TRUE)
        
        # Input Preisindex
        ARBEITSLOSENQUOTE <- read_delim(file.path(PARAM_INPUTS$path_allgemein_go, PARAM_INPUTS$file_arbeitslosenquote), delim  = ";", show_col_types = FALSE, trim_ws = TRUE)
        
        # Input Eckwerte
        ECKWERTE <- mod_input_eckwerte(
            PARAM_INPUTS = PARAM_INPUTS,
            PREISINDEX = PREISINDEX,
            LOHNINDEX = LOHNINDEX
            )   
        
        # MWST Szenarien
        MWST_SZENARIEN <- mod_input_mwst_szenarien(
            PARAM_INPUTS = PARAM_INPUTS
        )   
        
        # BIP Szenarien
        BIP_SZENARIEN_REAL <- mod_input_bip_szenarien(
            PARAM_INPUTS = PARAM_INPUTS
        )   

        # Input Zins
        ZINS_RAW <- read_delim(file.path(PARAM_INPUTS$path_allgemein_go, PARAM_INPUTS$file_zins), delim  = ";", show_col_types = FALSE, trim_ws = TRUE)
        
        # Input Minimalrente
        MINIMALRENTE <- mod_input_minimalrente(PARAM_INPUTS = PARAM_INPUTS)  
        
        # Input Szenarien MWST Projektionen der ESTV
        ESTV <- mod_input_estv(PARAM_INPUTS = PARAM_INPUTS)
        
       
        allgemein_go <- c(
            tl_input_ahv_abrechnung,
            list(
                BEV_BESTAND = BEV_BESTAND,
                BEV_SCENARIO = BEV_SCENARIO,
                IK = IK,
                RR_AVS = RR_AVS,
                SV_BEITRAGSSATZ = SV_BEITRAGSSATZ,
                ECKWERTE = ECKWERTE,
                MWST_SZENARIEN = MWST_SZENARIEN,
                BIP_SZENARIEN_REAL = BIP_SZENARIEN_REAL,
                ZINS_RAW = ZINS_RAW,
                MINIMALRENTE = MINIMALRENTE,
                ESTV = ESTV,
                PREISINDEX = PREISINDEX,
                LOHNINDEX = LOHNINDEX,
                ARBEITSLOSENQUOTE = ARBEITSLOSENQUOTE
            )
        )
        
        
                  ### MASSNAHMEN ALLGEMEIN (=Dataframe von mehr als einer Versicherung genutzt)  ### 
        

        
        #IK_STATPOP BEITRAGPRIVILEG
        BEITRAGPRIVILEG_POP <- mod_input_beitragprivileg(PARAM_INPUTS = PARAM_INPUTS)
 
               allgemein_massnahmen <- c(
            list(
                BEITRAGPRIVILEG_POP = BEITRAGPRIVILEG_POP
            )
        )
        
        
        
                            #######################################
                            ####### AHV INPUTDATEN EINLESEN #######
                            #######################################

                                 ### AHV: GELTENDE ORDNUNG ###
        

        # Input taux d'anticipation et d'ajournement
        ANT_AJO_FLEX <- mod_input_ant_ajo_flex(PARAM_INPUTS = PARAM_INPUTS)
        
        # Input maisons du jeu
        SPIELBANKEN <- mod_input_spielbanken(PARAM_INPUTS = PARAM_INPUTS)         
   
        # Input AHV21_MASSNAHMEN
        AHV21_MASSNAHMEN <- mod_input_ahv21(PARAM_INPUTS = PARAM_INPUTS)         
        
        # Datei IV_SCHULD_SCEN.csv aus dem Ordner inp_path_ahv_go laden
        IV_SCHULD_SCEN <- read_delim(file.path(PARAM_INPUTS$path_ahv_go, PARAM_INPUTS$file_iv_schuld), delim  = ";", show_col_types = FALSE, trim_ws = TRUE)
        
        ahv_go <- c(
            list(
                ANT_AJO_FLEX = ANT_AJO_FLEX,
                SPIELBANKEN  = SPIELBANKEN,
                IV_SCHULD_SCEN = IV_SCHULD_SCEN
            )
        )
        
                                    ### AHV: MASSNAHMEN ###    
        
        # Input der in xls berechneten Ausgleichmassnahmen
        AHV_AV2020_MASSN <- mod_input_ausgleichsmass(PARAM_INPUTS = PARAM_INPUTS)
        
        # faktor plaf
        FAKTOR_PLAF <- mod_input_faktor_plaf(PARAM_INPUTS = PARAM_INPUTS)
        
        # plafond différence age couple
        DIFF_AGE_PLAF <- mod_input_diff_age_plaf(PARAM_INPUTS = PARAM_INPUTS)
        
        # Input RR_BASMOYREV_HF
        RR_BASMOYREV_HF <- mod_input_basmoyrev_hf(PARAM_INPUTS = PARAM_INPUTS)
        
        # Input RR_haut_rev
        RR_HAUTSREV_HF <- mod_input_hautsrev_hf(PARAM_INPUTS = PARAM_INPUTS)
        
        #IMPACT_HILA_REFORM_NOM
        IMPACT_HILA_REFORM_NOM <- mod_input_hila_reform_nom(PARAM_INPUTS = PARAM_INPUTS)
        
        # Liechtensteiner Modell
        HIST_MORT_RENT <-  mod_input_ahv_hist_mort_rent(PARAM_INPUTS = PARAM_INPUTS)
        
        # supplément veuvage
        SUPP_VEUVAGE <- mod_input_supp_veuvage(PARAM_INPUTS = PARAM_INPUTS)
        
        # HILA
        #deces_parent_hila
        DEATHS_CH <- mod_input_mortalite_parent(PARAM_INPUTS = PARAM_INPUTS)
        
        #HILA_CURRENT
         HILA_CURRENT<- mod_input_hila_current(
             PARAM_INPUTS = PARAM_INPUTS,
             HILA_EL = HILA_EL
         )
        
        #FAKTOR_SPLIT
         FAKTOR_SPLIT <- mod_input_faktor_split(PARAM_INPUTS = PARAM_INPUTS)
         
         #IMPOT_13RENTE
         IMPOT_13RENTE <- mod_input_impot_13rente(PARAM_INPUTS = PARAM_INPUTS)
         
         #KINDERRENTEN_INPUT_AHV
         KINDERRENTEN_INPUT_AHV <- mod_input_kinderrenten_ahv(PARAM_INPUTS = PARAM_INPUTS)
         
         #franchise cotisation
         FRANCHISE_COTISATION <- mod_input_franchise_cotisation(PARAM_INPUTS = PARAM_INPUTS)
         
         #cotisation_independant
         COTISATION_INDEPENDANTS <- mod_input_cotisation_independants(PARAM_INPUTS = PARAM_INPUTS)
         
         #UV KV taggelder
         UV_KV_TAGGELDER <- mod_input_uv_kv_taggelder(PARAM_INPUTS = PARAM_INPUTS)
         
         TAUX_FLEX <- mod_input_taux_flex(PARAM_INPUTS = PARAM_INPUTS)
         
         
        ahv_massnahmen <- c(
            list(
                AHV_AV2020_MASSN = AHV_AV2020_MASSN,
                FAKTOR_PLAF = FAKTOR_PLAF,
                DIFF_AGE_PLAF = DIFF_AGE_PLAF,
                RR_BASMOYREV_HF = RR_BASMOYREV_HF,
                RR_HAUTSREV_HF = RR_HAUTSREV_HF,
                IMPACT_HILA_REFORM_NOM = IMPACT_HILA_REFORM_NOM,
                HIST_MORT_RENT = HIST_MORT_RENT,
                SUPP_VEUVAGE = SUPP_VEUVAGE,
                DEATHS_CH = DEATHS_CH,
                HILA_CURRENT = HILA_CURRENT,
                FAKTOR_SPLIT = FAKTOR_SPLIT,
                IMPOT_13RENTE = IMPOT_13RENTE,
                AHV21_MASSNAHMEN = AHV21_MASSNAHMEN,
                KINDERRENTEN_INPUT_AHV = KINDERRENTEN_INPUT_AHV,
                FRANCHISE_COTISATION = FRANCHISE_COTISATION,
                UV_KV_TAGGELDER = UV_KV_TAGGELDER,
                COTISATION_INDEPENDANTS = COTISATION_INDEPENDANTS,
                TAUX_FLEX = TAUX_FLEX
            )
        )
        

                        #######################################
                        ####### IV INPUTDATEN EINLESEN #######
                        #######################################
        
        ### IV: GELTENDE ORDNUNG ###        
        
        tl_iv_abrechnung <- mod_input_iv_abrechnung(PARAM_INPUTS = PARAM_INPUTS)
        tl_ivrenten <- mod_input_ivrenten(PARAM_INPUTS)
        UMFRAGEN <- mod_input_umfragen(PARAM_INPUTS)
        ESTV_IV <- mod_input_estv_iv(PARAM_INPUTS)
        tl_iv_med_massnahmen <-mod_input_iv_med_massnahmen(PARAM_INPUTS)
        
        iv_go <- c(
            tl_iv_abrechnung,
            tl_ivrenten,
            tl_iv_med_massnahmen,
            list(
                UMFRAGEN = UMFRAGEN,
                ESTV_IV = ESTV_IV
            )
        )
        
        ### IV: MASSNAHMEN ###  
        
        iv_massnahmen <- mod_input_massnahmen_iv(PARAM_INPUTS)
        
                                        
                            #######################################
                            ######## EO INPUTDATEN EINLESEN #######
                            #######################################
                                        
        ### EO: GELTENDE ORDNUNG ###        

        # Input EO Abrechnungsdaten
        tl_input_eo_abrechnung <- mod_input_eo_abrechnung(PARAM_INPUTS = PARAM_INPUTS)
        
        # Input Naissances, Population active EO
        tl_mod_input_eo_ofs_hist <- mod_input_eo_ofs_hist(PARAM_INPUTS = PARAM_INPUTS)
        
        # Input EO Register
        tl_mod_input_registre <- mod_input_eo_register(PARAM_INPUTS = PARAM_INPUTS)
        
        # Input EOMAX
        EOMAX_hist <- mod_input_eomax(PARAM_INPUTS = PARAM_INPUTS)
      
        
        eo_go <- c(
            tl_input_eo_abrechnung,
            tl_mod_input_eo_ofs_hist,
            tl_mod_input_registre,
            list(EOMAX_hist = EOMAX_hist)
        )
        
        ### EO: MASSNAHMEN ### 
        
        # Input der in xls berechneten EO-Massnahmen
        eo_massnahmen <- mod_input_eo_massnahmen(PARAM_INPUTS = PARAM_INPUTS)
        
        
        
        
                        #######################################
                        ######## EL INPUTDATEN EINLESEN #######
                        #######################################
        
        ### EL: GELTENDE ORDNUNG ###  
        
        # Input pop EL
        PROJ_BEZ_EL_KOMP <- mod_input_pop_el(PARAM_INPUTS)
        
        #ABR_DEF (JAHR - last 2019) ## à revoir
        tl_input_abr <- mod_input_el_abrechnung(PARAM_INPUTS = PARAM_INPUTS)

        ABR_EL_DB <- mod_input_abrechnung_el_db(PARAM_INPUTS = PARAM_INPUTS)
        
        # #### Registre de rente
        tl_input_rr <- mod_input_el_rr(PARAM_INPUTS = PARAM_INPUTS)

        ### Entwicklung AHV und IV Renter
        tl_input_entwicklung <- mod_input_el_entwicklung(PARAM_INPUTS)

        ### Rentner AHV und IV
        tl_input_rentner <- mod_input_el_hist_rentner(PARAM_INPUTS)

        # Input el quote proj
        EL_QUOTE_PROJ <- mod_input_el_quote_proj(PARAM_INPUTS=PARAM_INPUTS)
        
        ## rente min
        RENTE_MIN  <- mod_input_el_rente_min(PARAM_INPUTS = PARAM_INPUTS)
        
        ### vorb age ref
        VORB_AGEREF <- mod_input_el_vorb_ageref(PARAM_INPUTS=PARAM_INPUTS)
        
        ## Heim anteil
        EL_HEIM_QUOTE <- mod_input_el_heim_quote_proj(PARAM_INPUTS=PARAM_INPUTS)
        
        ## EL Betrag QUOTE
        EL_BETRAG_QUOTE <- mod_input_el_betrag_quote(PARAM_INPUTS = PARAM_INPUTS)
        
        # EL reform prov
        EL_REFORM_PROV_INP <- mod_input_el_reform_prov(PARAM_INPUTS = PARAM_INPUTS)
        
        ####weiv
        WEIV <- mod_input_weiv(PARAM_INPUTS=PARAM_INPUTS)
        
        ### krankheit beh kosent
        KRANKHEIT_BEH_KOSTEN <- mod_input_krankheit_beh_kosten(PARAM_INPUTS=PARAM_INPUTS)
        QUOTIEN <- mod_input_quotien_mortalite(PARAM_INPUTS = PARAM_INPUTS)
        
        ##ahv21 Ausgleichmassnahmen
        AUSGL_MASS_AHV21 <- mod_input_ausgl_mass_ahv21(PARAM_INPUTS = PARAM_INPUTS)
        
        ## indictateur data
        INPUT_INDICATEUR <- mod_input_indicateur(PARAM_INPUTS = PARAM_INPUTS)
        
        el_go <- c(
            tl_input_abr,
            tl_input_rr,
            tl_input_entwicklung,
            tl_input_rentner,
              list(
                  PROJ_BEZ_EL_KOMP = PROJ_BEZ_EL_KOMP,
                  ABR_EL_DB = ABR_EL_DB,
                  EL_QUOTE_PROJ = EL_QUOTE_PROJ,
                  RENTE_MIN = RENTE_MIN,
                  VORB_AGEREF = VORB_AGEREF,
                  EL_HEIM_QUOTE = EL_HEIM_QUOTE,
                  EL_BETRAG_QUOTE = EL_BETRAG_QUOTE,
                  EL_REFORM_PROV_INP = EL_REFORM_PROV_INP,
                  WEIV = WEIV,
                  KRANKHEIT_BEH_KOSTEN = KRANKHEIT_BEH_KOSTEN,
                  QUOTIEN = QUOTIEN,
                  AUSGL_MASS_AHV21 = AUSGL_MASS_AHV21,
                  INPUT_INDICATEUR = INPUT_INDICATEUR
            )
        )
        
        ### EL: MASSNAHMEN ###  
        ## percentil el bezueger
        EL_PERCENTIL <- mod_input_el_percentil(PARAM_INPUTS)
        
        el_massnahmen <- c(
            list(
                EL_PERCENTIL = EL_PERCENTIL
            )
        )
        
        
                            #######################################
                            ####### UL INPUTDATEN EINLESEN ########
                            #######################################
        
        ### UL: GELTENDE ORDNUNG ###        
        
        ul_go <- tidylist()
        
        ### UL: MASSNAHMEN ###  
        
        ul_massnahmen <- tidylist()
        
                            #######################################
                            #### RENTENTAB INPUTDATEN EINLESEN ####
                            #######################################
        
        # Input composantes salaire historiques
        CS <- mod_input_cs(PARAM_INPUTS = PARAM_INPUTS)       
        
        # RAM garantie minimal fÃ¼r Umrechnungsblatt
        RAM_GARMIN <- mod_input_ram_garmin(PARAM_INPUTS = PARAM_INPUTS)
        
        # HILO fuer Umrechnungsblatt
        HILO <- mod_input_hilo(PARAM_INPUTS = PARAM_INPUTS)
        
        # input Aufwertungsfaktoren
        AUFWFAKT_FULL <- mod_input_aufwfakt_full(PARAM_INPUTS = PARAM_INPUTS)
        
        # Quotité de rente g
        QUOTITE_RENTE_G <- mod_input_quotite_rente_g(PARAM_INPUTS = PARAM_INPUTS)
        
        rententab <- c(
            list(
                CS = CS,
                RAM_GARMIN = RAM_GARMIN,
                HILO = HILO,
                AUFWFAKT_FULL = AUFWFAKT_FULL,
                QUOTITE_RENTE_G = QUOTITE_RENTE_G
            )
        )
        
                            #######################################
                            ### BEITRAGSTAB INPUTDATEN EINLESEN ###
                            #######################################
        
        # Input composantes salaire historiques
        HIST_BAREME_DEGRESSIF <- mod_input_hist_bareme_degressif(PARAM_INPUTS = PARAM_INPUTS)
        
        beitragstab <- c(
            list(
                HIST_BAREME_DEGRESSIF = HIST_BAREME_DEGRESSIF
            )
        )
        
                            #######################################
                            ###### EOTAB INPUTDATEN EINLESEN ######
                            #######################################
        
        eotab <- tidylist()

        
        
                            #######################################
                            ########## DATEN AUSLESEN #############
                            #######################################

        
        tidylist_write(allgemein_go, inp_path_allgemein_go)
        tidylist_write(allgemein_massnahmen, inp_path_allgemein_massnahmen)
        
        tidylist_write(ahv_go, inp_path_ahv_go)
        tidylist_write(ahv_massnahmen, inp_path_ahv_massnahmen)
        
        tidylist_write(iv_go, inp_path_iv_go)
        tidylist_write(iv_massnahmen, inp_path_iv_massnahmen)
        
        tidylist_write(eo_go, inp_path_eo_go)
        tidylist_write(eo_massnahmen, inp_path_eo_massnahmen)
        
        tidylist_write(el_go, inp_path_el_go)
        tidylist_write(el_massnahmen, inp_path_el_massnahmen)
        
        tidylist_write(ul_go, inp_path_ul_go)
        tidylist_write(ul_massnahmen, inp_path_ul_massnahmen) 
         
        tidylist_write(rententab, inp_path_rententab)
        
        tidylist_write(eotab, inp_path_eotab)
        
        tidylist_write(beitragstab, inp_path_beitragstab)
        

}

