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

import org.texttechnologylab.project.gruppe_05_1.domain.speaker.Membership;
import org.texttechnologylab.project.gruppe_05_1.domain.speech.Speech;
import org.texttechnologylab.project.gruppe_05_1.util.GeneralUtils;

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

public class ParlamentarierDetails {
    String id;
    String vorname;
    String nachname;
    String partei;
    String title;
    LocalDate geburtsdatum;
    String geburtsort;
    LocalDate sterbedatum;
    String geschlecht;
    String beruf;
    String akademischerTitel;
    String familienstand;
    String religion;
    String vita;
    String primaryFoto;     // war nicht ursprünglich in der Datenbank, wurde hinzugefügt, um das primäres Bild zu speichern
    String party;

    List<Membership> memberships;

    List<Speech>    reden;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getVorname() {
        return vorname;
    }

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

    public String getNachname() {
        return nachname;
    }

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

    public String getPartei() {
        return partei;
    }

    public void setPartei(String partei) {
        this.partei = partei;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public LocalDate getGeburtsdatum() {
        return geburtsdatum;
    }

    public String getGeburtsdatumPP() {
        if (geburtsdatum == null) return null;
        return GeneralUtils.formatDate(geburtsdatum);
    }

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

    public String getGeburtsort() {
        return geburtsort;
    }

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

    public LocalDate getSterbedatum() {
        return sterbedatum;
    }

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

    public String getGeschlecht() {
        return geschlecht;
    }

    public void setGeschlecht(String geschlecht) {
        this.geschlecht = geschlecht;
    }

    public String getBeruf() {
        return beruf;
    }

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

    public String getAkademischerTitel() {
        return akademischerTitel;
    }

    public void setAkademischerTitel(String akademischerTitel) {
        this.akademischerTitel = akademischerTitel;
    }

    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 getVita() {
        return vita;
    }

    public void setVita(String vita) {
        this.vita = vita;
    }

    public String getParty() {
        return party;
    }

    public void setParty(String party) {
        this.party = party;
    }

    public String getPrimaryFoto() {
        return primaryFoto;
    }

    public void setPrimaryFoto(String primaryFoto) {
        this.primaryFoto = primaryFoto;
    }

    public List<Membership> getMemberships() {
        return memberships;
    }

    public void setMemberships(List<Membership> memberships) {
        this.memberships = memberships;
    }

    public List<Speech> getReden() {
        return reden;
    }

    public void setReden(List<Speech> reden) {
        this.reden = reden;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof ParlamentarierDetails that)) return false;
        return Objects.equals(id, that.id) ;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", ParlamentarierDetails.class.getSimpleName() + "[", "]")
                .add("id='" + id + "'")
                .add("vorname='" + vorname + "'")
                .add("nachname='" + nachname + "'")
                .add("partei='" + partei + "'")
                .add("title='" + title + "'")
                .add("geburtsdatum=" + geburtsdatum)
                .add("geburtsort='" + geburtsort + "'")
                .add("sterbedatum=" + sterbedatum)
                .add("geschlecht='" + geschlecht + "'")
                .add("beruf='" + beruf + "'")
                .add("akademischertitel='" + akademischerTitel + "'")
                .add("familienstand='" + familienstand + "'")
                .add("religion='" + religion + "'")
                .add("vita='" + vita + "'")
                .add("primaryFoto='" + primaryFoto + "'")
                .add("party='" + party + "'")
                // .add("memberships=" + memberships)
                .add("reden=" + reden)
                .toString();
    }
}
