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

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

public abstract class MdbName {

    private String nachname;
    private String vorname;
    private String ortszusatz;
    private String adel;
    private String praefix;
    private String andereTitel;
    private String akadTitel;

    private LocalDate historieVon;
    private LocalDate historieBis;

    public String getNachname() {
        return nachname;
    }

    public void setNachname(String nachname) {
        this.nachname = nachname;
    }

    public String getVorname() {
        return vorname;
    }

    public void setVorname(String vorname) {
        this.vorname = vorname;
    }

    public String getOrtszusatz() {
        return ortszusatz;
    }

    public void setOrtszusatz(String ortszusatz) {
        this.ortszusatz = ortszusatz;
    }

    public String getAdel() {
        return adel;
    }

    public void setAdel(String adel) {
        this.adel = adel;
    }

    public String getPraefix() {
        return praefix;
    }

    public void setPraefix(String praefix) {
        this.praefix = praefix;
    }

    public String getAndereTitel() {
        return andereTitel;
    }

    public void setAndereTitel(String andereTitel) {
        this.andereTitel = andereTitel;
    }

    public String getAkadTitel() {
        return akadTitel;
    }

    public void setAkadTitel(String akadTitel) {
        this.akadTitel = akadTitel;
    }

    public LocalDate getHistorieVon() {
        return historieVon;
    }

    public void setHistorieVon(LocalDate historieVon) {
        this.historieVon = historieVon;
    }

    public LocalDate getHistorieBis() {
        return historieBis;
    }

    public void setHistorieBis(LocalDate historieBis) {
        this.historieBis = historieBis;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof MdbName)) return false;
        MdbName name = (MdbName) o;
        return Objects.equals(nachname, name.nachname) && Objects.equals(vorname, name.vorname) && Objects.equals(ortszusatz, name.ortszusatz) && Objects.equals(adel, name.adel) && Objects.equals(praefix, name.praefix) && Objects.equals(andereTitel, name.andereTitel) && Objects.equals(akadTitel, name.akadTitel) && Objects.equals(historieVon, name.historieVon) && Objects.equals(historieBis, name.historieBis);
    }

    @Override
    public int hashCode() {
        return Objects.hash(nachname, vorname, ortszusatz, adel, praefix, andereTitel, akadTitel, historieVon, historieBis);
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", MdbName.class.getSimpleName() + "[", "]")
                .add("nachname='" + nachname + "'")
                .add("vorname='" + vorname + "'")
                .add("ortszusatz='" + ortszusatz + "'")
                .add("adel='" + adel + "'")
                .add("praefix='" + praefix + "'")
                .add("andereTitel='" + andereTitel + "'")
                .add("akadTitel='" + akadTitel + "'")
                .add("historieVon=" + historieVon)
                .add("historieBis=" + historieBis)
                .toString();
    }
}
