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 no.valg.valgnatt.database.domene.ValgTypeAar;
import org.hibernate.annotations.Immutable;

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

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

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

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

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

	public static String id(ValgTypeAar vta, String nr) {
		return id(vta.getValgType(), vta.getValgAar(), nr);
	}

	private static String id(ValgType valgtype, Integer valgaar, String nr) {
		return id(valgtype.name(), valgaar, nr);
	}

	private static String id(String valgtype, Integer valgaar, String nr) {
		return valgtype + "-" + valgaar + "-" + nr;
	}

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

	public void setValgType(ValgType valgtype) {
		this.valgtype = valgtype.name();
	}

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

	public String id() {
		return id(valgtype, valgaar, nr);
	}

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

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

}
