package no.valg.valgnatt.backend.parser;

import java.util.Date;

import no.valg.valgnatt.database.domene.OpptaltStatus;
import no.valg.valgnatt.database.domene.SkjemaType;
import no.valg.valgnatt.database.domene.ValgType;
import no.valg.valgnatt.database.hibernate.Stemmeoppgjor;

public class Skjemadata {

	private ValgType valgType;
	private String skjemaType;
	private String kommnr;
	private String kretsnr;
	private Stemmeresultater stemmeresultater;
	private Stemmeoppgjor stemmeoppgjør;
	private Date originalTid;


	Skjemadata(ValgType valgType, String skjemaType, String kommnr, String kretsnr, Date originalTid) {
		this.valgType = valgType;
		this.skjemaType = skjemaType;
		this.kommnr = kommnr;
		this.kretsnr = kretsnr;
		this.originalTid = originalTid;
	}

	/**
	 * Opptaltstatus er bestemt av hvilke typer tellinger som er gjort av FHS og VTS (se Stemmeresultater.getOpptaltStatus()).
	 * To unntak finnes:
	 * 1. Dersom skjemaet er et oppgjørsskjema, så blir opptaltstatus = 9 (Oppgjør)
	 * 2. Dersom opptaltstatus basert på stemmeresultater er nådd sitt maksimum for kretsen, så settes til 8 (Alle tellinger er endelige)
	 */
	OpptaltStatus getOpptaltStatus(int opptaltStatusMax) {
		if (skjemaType.equals(SkjemaType.OPPGJØR.kode)) {
			return OpptaltStatus.OPPGJØR;
		} else {
			if (stemmeresultater.getOpptaltStatus() == opptaltStatusMax) {
				return OpptaltStatus.ALLE_ENDELIG;
			} else {
				return OpptaltStatus.values()[stemmeresultater.getOpptaltStatus()];
			}
		}
	}

	public ValgType getValgtype() {
		return valgType;
	}

	String getSkjemaType() {
		return skjemaType;
	}

	public String getKommnr() {
		return kommnr;
	}

	String getKretsnr() {
		return kretsnr;
	}

	Stemmeresultater getStemmeresultater() {
		return stemmeresultater;
	}

	void setStemmeresultater(Stemmeresultater stemmeresultater) {
		this.stemmeresultater = stemmeresultater;
	}

	Stemmeoppgjor getStemmeoppgjør() {
		return stemmeoppgjør;
	}

	void setStemmeoppgjør(Stemmeoppgjor stemmeoppgjør) {
		this.stemmeoppgjør = stemmeoppgjør;
	}

	Date getOriginalTid() {
		return originalTid;
	}
}
