package no.valg.valgnatt.backend.mandatberegning.beregning;

import java.util.Arrays;
import java.util.Set;
import java.util.TreeSet;

import no.valg.valgnatt.backend.GrunnlagsdataMockup;
import no.valg.valgnatt.database.domene.ValgType;
import no.valg.valgnatt.database.geografi.Område;
import no.valg.valgnatt.backend.mandatberegning.MandatBeregningArgumenter;

import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

public class StemmetallTest {

    private static GrunnlagsdataMockup gdm;

    @BeforeClass
    public static void initialiser() {
        gdm = new GrunnlagsdataMockup();
        gdm.initialiser(ValgType.ST, 2017);
    }

    @Test
    public void beregn_Opptalt_A8200() throws Exception {
        Set<String> betaPartier = new TreeSet(Arrays.asList(new String[]{"A", "SV", "R", "SP", "KRF", "MDG", "V", "H", "FRP"}));
        Område område = gdm.getLand();
        MandatBeregningArgumenter mba = new MandatBeregningArgumenter(område, true);

        Stemmetall.StemmetallberegningStatus status = Stemmetall.beregn(mba, område, betaPartier);

        Assert.assertEquals(8200, område.getValgdistrikt().getPartiMandater("A").getResultatData().getStemmer());
        Assert.assertEquals(status, Stemmetall.StemmetallberegningStatus.OPPTALTE_STEMMER);
    }

    @Test
    public void beregn_Prognose_A22884() throws Exception {
        Set<String> betaPartier = new TreeSet(Arrays.asList(new String[]{"A", "SV", "R", "SP", "KRF", "MDG", "V", "H", "FRP"}));
        Område område = gdm.getLand();
        MandatBeregningArgumenter mba = new MandatBeregningArgumenter(område, false);

        Stemmetall.StemmetallberegningStatus status = Stemmetall.beregn(mba, område, betaPartier);

        Assert.assertEquals(22884, område.getValgdistrikt().getPartiMandater("A").getPrognoseData().getStemmer());
        Assert.assertEquals(status, Stemmetall.StemmetallberegningStatus.PROGNOSTISERTE_STEMMER);
    }


}
