package no.valg.valgnatt.database.hibernate;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import no.valg.valgnatt.database.domene.ValgType;
import org.hibernate.annotations.Immutable;

import javax.persistence.Column;
import javax.persistence.Embeddable;

@Embeddable
@Immutable
@NoArgsConstructor //Hibernate-krav
@AllArgsConstructor //Builder-krav
@Builder
public class KandidatId implements java.io.Serializable {

    @Getter
    @Setter
    @Column(name = "VALGAAR", nullable = false)
    private Integer valgaar;

	@Column(name = "VALGTYPE", nullable = false)
	private String valgtype;

    @Getter
    @Column(name = "PARTIKODE", nullable = false, length = 60)
    private String partikode;

    @Getter
    @Column(name = "VALGDISTRIKTNR", nullable = false, length = 16)
    private String valgdistriktnr;

    @Getter
    @Column(name = "PLASSNR", nullable = false)
    private Integer plassnr;

	// Konstruktoren brukes kun for test-formål, vi trenger ikke å oppgi mer - ikke bruk denne i produksjonskode!
	public KandidatId(int valgår, int plassnr) {
		this.valgaar = valgår;
		this.plassnr = plassnr;
	}

	public ValgType getValgtype() {
		return ValgType.valueOf(this.valgtype);
	}

	@Override
	public boolean equals(Object other) {
        return other != null && other.getClass() == this.getClass() && id().equals(((KandidatId) other).id());
	}

	public String id() {
		return valgaar + "-" + valgtype + "-" + valgdistriktnr + "-" + partikode + "-" + plassnr;
	}

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

	@Override
	public String toString() {
		return id();
	}

}
