package org.texttechnologylab.project.gruppe_05_1.domain.mdb;

import java.time.LocalDate;
import java.util.Objects;
import java.util.StringJoiner;

public abstract class BiografischeAngaben {

    private LocalDate       geburtsdatum;
    private String          geburtsort;
    private String          geburtsland;
    private LocalDate       sterbedatum;
    private String          gender;
    private String          familienstand;  // String und kein Enum, weil über 60 Werte wie "alleinerziehend, 3 Kinder", "eheähnl. Lebensgemeinschaft, 3 Kinder", "verheiratet, 12 Kinder" vorkommen...
    private String          religion;
    private String          beruf;
    private String          parteiKuerzel;
    private String          vitaKurz;
    private String          veroeffentlichungspflichtiges;

    public LocalDate getGeburtsdatum() {
        return geburtsdatum;
    }

    public void setGeburtsdatum(LocalDate geburtsdatum) {
        this.geburtsdatum = geburtsdatum;
    }

    public String getGeburtsort() {
        return geburtsort;
    }

    public void setGeburtsort(String geburtsort) {
        this.geburtsort = geburtsort;
    }

    public String getGeburtsland() {
        return geburtsland;
    }

    public void setGeburtsland(String geburtsland) {
        this.geburtsland = geburtsland;
    }

    public LocalDate getSterbedatum() {
        return sterbedatum;
    }

    public void setSterbedatum(LocalDate sterbedatum) {
        this.sterbedatum = sterbedatum;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getFamilienstand() {
        return familienstand;
    }

    public void setFamilienstand(String familienstand) {
        this.familienstand = familienstand;
    }

    public String getReligion() {
        return religion;
    }

    public void setReligion(String religion) {
        this.religion = religion;
    }

    public String getBeruf() {
        return beruf;
    }

    public void setBeruf(String beruf) {
        this.beruf = beruf;
    }

    public String getParteiKuerzel() {
        return parteiKuerzel;
    }

    public void setParteiKuerzel(String parteiKuerzel) {
        this.parteiKuerzel = parteiKuerzel;
    }

    public String getVitaKurz() {
        return vitaKurz;
    }

    public void setVitaKurz(String vitaKurz) {
        this.vitaKurz = vitaKurz;
    }

    public String getVeroeffentlichungspflichtiges() {
        return veroeffentlichungspflichtiges;
    }

    public void setVeroeffentlichungspflichtiges(String veroeffentlichungspflichtiges) {
        this.veroeffentlichungspflichtiges = veroeffentlichungspflichtiges;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof BiografischeAngaben that)) return false;
        return Objects.equals(geburtsdatum, that.geburtsdatum) && Objects.equals(geburtsort, that.geburtsort) && Objects.equals(geburtsland, that.geburtsland) && Objects.equals(sterbedatum, that.sterbedatum) && Objects.equals(gender, that.gender) && Objects.equals(familienstand, that.familienstand) && Objects.equals(religion, that.religion) && Objects.equals(beruf, that.beruf) && Objects.equals(parteiKuerzel, that.parteiKuerzel) && Objects.equals(vitaKurz, that.vitaKurz) && Objects.equals(veroeffentlichungspflichtiges, that.veroeffentlichungspflichtiges);
    }

    @Override
    public int hashCode() {
        return Objects.hash(geburtsdatum, geburtsort, geburtsland, sterbedatum, gender, familienstand, religion, beruf, parteiKuerzel, vitaKurz, veroeffentlichungspflichtiges);
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", BiografischeAngaben.class.getSimpleName() + "[", "]")
                .add("geburtsdatum=" + geburtsdatum)
                .add("geburtsort='" + geburtsort + "'")
                .add("geburtsland='" + geburtsland + "'")
                .add("sterbedatum=" + sterbedatum)
                .add("gender=" + gender)
                .add("maritalStatus=" + familienstand)
                .add("religion=" + religion)
                .add("beruf='" + beruf + "'")
                .add("parteiKuerzel='" + parteiKuerzel + "'")
                .add("vitaKurz='" + vitaKurz + "'")
                .add("veroeffentlichungspflichtiges='" + veroeffentlichungspflichtiges + "'")
                .toString();
    }
}
