package cz.moneta.test.dsl.util.data.client;

import java.util.EnumSet;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public enum IncomeSubtype {
    UNEMPLOYMENT_SUPPORT("Podpora v nezaměstnanosti"),
    EMPLOYMENT_PER_FIXED("Příjem ze závislé činnosti na dobu určitou"),
    EMPLOYMENT_PER_INDEFINITE("Příjem ze závislé činnosti na dobu neurčitou"),
    SALARY_ON_AGRMNT_TO_JOB_COMPLETE("Příjem na základě dohody o provedení práce"),
    SALARY_ON_AGRMNT_TO_JOB_PERFORM("Příjem na základě dohody o pracovní činnosti"),
    BUSINESS("Příjem z podnikání"),
    RENT("Renta"),
    OTHER("Jiný"),
    SCHOLARSHIP("Stipendium"),
    OLDAGE_PENSION("Starobní důchod"),
    DISABILITY_PENSION("Invalidní důchod"),
    WIDOW_PENSION("Vdovský důchod"),
    OTHER_PENSION("Ostatní důchodové dávky a podpory"),
    MATERNITY_ALLOWANCE("Peněžitá pomoc v mateřství"),
    PARENTAL_ALLOWANCE("Rodičovský příspěvek"),
    FOSTER_ALLOWANCE("Pěstounství"),
    MAINTENANCE_ALLOWANCE("Výživné"),
    SUBSISTENCE_ALLOWANCE("Diety"),
    PROFIT_SHARE("(Spolu)Podíl na zisku subjektu"),
    CAPITAL_ASSETS("Příjem z kapitálového majetku"),
    RENTAL_IN_TAX_RETURN("Pronájem v DAP (Daňové přiznání)"),
    RENTAL_OFF_TAX_RETURN("Pronájem mimo DAP (Daňové přiznání)"),
    FUTURE_RENTAL("Budoucí příjem z pronájmu");

    private final String ufoValue;

    private static final Map<String, IncomeSubtype> UFO_VALUES_LOOKUP = EnumSet.allOf(IncomeSubtype.class).stream()
            .collect(Collectors.toMap(is -> is.ufoValue, Function.identity()));

    IncomeSubtype(String ufoValue) {
        this.ufoValue = ufoValue;
    }

    public String getUfoValue() {
        return this.ufoValue;
    }

    public static IncomeSubtype getByUfoValue(String ufoValue) {
        return UFO_VALUES_LOOKUP.get(ufoValue);
    }

}