package abstractClasses;

import enumeration.Gender;
import jakarta.persistence.*;

import java.util.Objects;

@MappedSuperclass
@Table(name = "Hochschulmitglied")
public abstract class UniversityMember
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private int id;

    @Column(name = "Geschlecht")
    private String gender;

    @Column(name = "Vorname")
    private String firstName;

    @Column(name = "Nachname")
    private String lastName;

    @Column(name = "Wohnort")
    private String placeOfResidence;

    @Column(name = "Geburtsort")
    private String birthPlace;

    @Column(name = "Hochschul E-Mail")
    private String officialEmail;

    @Column(name = "Private E-Mail")
    private String privateEmail;

    @Column(name = "Angemeldet")
    private Boolean isSignedUpForCourse;

    protected UniversityMember()
    {

    }

    protected UniversityMember(int id, String gender, String firstName, String lastName, String placeOfResidence, String birthPlace,
                            String officialEmail, String privateEmail, Boolean isSignedUpForCourse)
    {
        this.id = id;
        this.gender = gender;
        this.firstName = firstName;
        this.lastName = lastName;
        this.placeOfResidence = placeOfResidence;
        this.birthPlace = birthPlace;
        this.officialEmail = officialEmail;
        this.privateEmail = privateEmail;
        this.isSignedUpForCourse = isSignedUpForCourse;
    }

    @Override
    public boolean equals(Object o)
    {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        UniversityMember that = (UniversityMember) o;
        return id == that.id;
    }

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

    public int getId()
    {
        return id;
    }

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

    public String getGender()
    {
        return gender;
    }

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

    public String getFirstName()
    {
        return firstName;
    }

    public void setFirstName(String firstName)
    {
        this.firstName = firstName;
    }

    public String getLastName()
    {
        return lastName;
    }

    public void setLastName(String lastName)
    {
        this.lastName = lastName;
    }

    public String getPlaceOfResidence()
    {
        return placeOfResidence;
    }

    public void setPlaceOfResidence(String placeOfResidence)
    {
        this.placeOfResidence = placeOfResidence;
    }

    public String getBirthPlace()
    {
        return birthPlace;
    }

    public void setBirthPlace(String birthPlace)
    {
        this.birthPlace = birthPlace;
    }

    public String getOfficialEmail()
    {
        return officialEmail;
    }

    public void setOfficialEmail(String officialEmail)
    {
        this.officialEmail = officialEmail;
    }

    public String getPrivateEmail()
    {
        return privateEmail;
    }

    public void setPrivateEmail(String privateEmail)
    {
        this.privateEmail = privateEmail;
    }

    public Boolean getSignedUpForCourse()
    {
        return isSignedUpForCourse;
    }

    public void setSignedUpForCourse(Boolean signedUpForCourse)
    {
        isSignedUpForCourse = signedUpForCourse;
    }
}