package no.valg.valgnatt.database.forberedvalg.geografi;

import java.util.Collection;
import java.util.Map;
import java.util.TreeMap;

import no.valg.valgnatt.database.domene.ValgType;
import no.valg.valgnatt.database.domene.ValgTypeAar;
import no.valg.valgnatt.database.forberedvalg.bean.BeanKommune;
import no.valg.valgnatt.database.forberedvalg.bean.BeanStemmekrets;

/**
 * En hjelpeklasse for å transformere fra et sett av gamle grunnlagsdata og nye JSON-skjema med grunnlagsdata
 * fra EVA Admin. Data mellomlagres i denne datastrukturen, slik at det blir forholdsvis enkelt å skrive
 * ut de korrekte CSV'ene som skal lastes inn i databasen.
 */
public class AlleValg {


    private Map<ValgTypeAar, Valg> valgMap = new TreeMap<>();

    public Valg getValg(ValgType valgType, int valgAar) {
        return valgMap.get(new ValgTypeAar(valgType, valgAar));
    }

    public void populerStemmekretser(Collection<BeanStemmekrets> stemmekretser) {
        for (BeanStemmekrets bs : stemmekretser) {
            ValgTypeAar vta = new ValgTypeAar(ValgType.valueOf(bs.getValgtype()), bs.getValgaar());
            Valg valg = valgMap.get(vta);
            if (valg == null) {
                valg = new Valg(ValgType.valueOf(bs.getValgtype()), bs.getValgaar(), this);
                valgMap.put(vta, valg);
            }
            valg.leggTilKrets(new Krets(valg, bs.getKommnr(), bs.getKretsnr(), bs.getStemmeberettigede()));
        }
    }

    public void populerValgdistrikter(Map<String, BeanKommune> kommuneMap) {
        for (BeanKommune bk : kommuneMap.values()) {
            Valg valg = valgMap.get(new ValgTypeAar(ValgType.valueOf(bk.getValgtype()), bk.getValgaar()));
            if (valg != null) {
                Kommune kommune = valg.getKommune(bk.getKommnr());
                if (kommune != null) {
                    for (Krets krets : kommune.getKretser()) {
                        krets.setValgdistriktnr(bk.getValgdistriktnr());
                    }
                }
            }
        }
    }
}
