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

import org.junit.Test;

import java.util.List;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class KonverteringerTest {

    private static final String GAMMELT_KOMMUNENUMMER_KLÆBU = "1662";
    private static final String GAMMELT_KOMMUNENUMMER_TRONDHEIM = "1601";
    private static final String GAMMELT_KRETSNUMMER = "0002";
    private static final String NYTT_KOMMUNENUMMER = "5001";
    private static final String NYTT_KRETSNUMMER = "0040";
    private static final int VALGÅR = 2019;

    @Test
    public void konverteringFraGammeltTilNyttKommunenummer() {
        List<String> kommune = Konverteringer.kommune(GAMMELT_KOMMUNENUMMER_KLÆBU, VALGÅR, KonverteringStrategi.GAMMEL_TIL_NY);
        assertTrue(kommune.contains(NYTT_KOMMUNENUMMER));
    }

    @Test
    public void konverteringFraNyttTilGammeltKommunenummer() {
        List<String> kommune = Konverteringer.kommune(NYTT_KOMMUNENUMMER, VALGÅR, KonverteringStrategi.NY_TIL_GAMMEL);
        assertTrue(kommune.contains(GAMMELT_KOMMUNENUMMER_KLÆBU));
        assertTrue(kommune.contains(GAMMELT_KOMMUNENUMMER_TRONDHEIM));
    }

    @Test
    public void konverteringFraGammeltTilNyttKretsnummer() {
        List<String> krets = Konverteringer.krets(GAMMELT_KOMMUNENUMMER_KLÆBU, GAMMELT_KRETSNUMMER, VALGÅR, KonverteringStrategi.GAMMEL_TIL_NY);
        assertTrue(krets.contains(NYTT_KOMMUNENUMMER + ":" + NYTT_KRETSNUMMER));
    }

    @Test
    public void konverteringFraNyttTilGammeltKretsnummer() {
        List<String> krets = Konverteringer.krets(NYTT_KOMMUNENUMMER, NYTT_KRETSNUMMER, VALGÅR, KonverteringStrategi.NY_TIL_GAMMEL);
        assertTrue(krets.contains(GAMMELT_KOMMUNENUMMER_KLÆBU + ":" + GAMMELT_KRETSNUMMER));
    }

    @Test
    public void konverteringFraGammeltTilNyttKommunenummerForGamleSandefjord() {
        List<String> kommune = Konverteringer.kommune("0706", 2019, KonverteringStrategi.GAMMEL_TIL_NY);
        assertTrue(kommune.contains("3804"));
    }

    @Test
    public void sitsteSammenlignbar_gittKommuneBruddSammeår_returnererFalse() {
        boolean ssammenlignbar = Konverteringer.ssammenlignbar("0701", 2013);
        assertFalse(ssammenlignbar);
    }

    @Test
    public void sitsteSammenlignbar_gittKommuneBruddSistSammenlignbar_returnererFalse() {
        boolean ssammenlignbar = Konverteringer.ssammenlignbar("0701", 2015);
        assertFalse(ssammenlignbar);
    }

    @Test
    public void sitsteSammenlignbar_gittKommuneBruddFørSistSammenlignbar_returnererTrue() {
        boolean ssammenlignbar = Konverteringer.ssammenlignbar("0701", 2017);
        assertTrue(ssammenlignbar);
    }
    
    @Test
    public void nestSitsteSammenlignbar_gittKommuneBruddSammeår_returnererFalse() {
        boolean nssammenlignbar = Konverteringer.nssammenlignbar("0701", 2013);
        assertFalse(nssammenlignbar);
    }

    @Test
    public void nestSitsteSammenlignbar_gittKommuneBruddSistSammenlignbar_returnererFalse() {
        boolean nssammenlignbar = Konverteringer.nssammenlignbar("0701", 2015);
        assertFalse(nssammenlignbar);
    }

    @Test
    public void nestSitsteSammenlignbar_gittKommuneBruddNestSistSammenlignbar_returnererFalse() {
        boolean nssammenlignbar = Konverteringer.nssammenlignbar("0701", 2017);
        assertFalse(nssammenlignbar);
    }

    @Test
    public void nestSitsteSammenlignbar_gittKommuneBruddFørNestSistSammenlignbar_returnererTrue() {
        boolean nssammenlignbar = Konverteringer.nssammenlignbar("0701", 2019);
        assertTrue(nssammenlignbar);
    }
    
    //---

    @Test
    public void sitsteSammenlignbar_gittKommuneBydelBruddSammeår_returnererFalse() {
        boolean ssammenlignbar = Konverteringer.ssammenlignbar("0301", 7, 2013);
        assertFalse(ssammenlignbar);
    }

    @Test
    public void sitsteSammenlignbar_gittKommuneBydelBruddSistSammenlignbar_returnererFalse() {
        boolean ssammenlignbar = Konverteringer.ssammenlignbar("0301", 7, 2015);
        assertFalse(ssammenlignbar);
    }

    @Test
    public void sitsteSammenlignbar_gittKommuneBydelBruddFørSistSammenlignbar_returnererTrue() {
        boolean ssammenlignbar = Konverteringer.ssammenlignbar("0301", 7, 2017);
        assertTrue(ssammenlignbar);
    }

    @Test
    public void nestSitsteSammenlignbar_gittKommuneBydelBruddSammeår_returnererFalse() {
        boolean nssammenlignbar = Konverteringer.nssammenlignbar("0301", 7, 2013);
        assertFalse(nssammenlignbar);
    }

    @Test
    public void nestSitsteSammenlignbar_gittKommuneBydelBruddSistSammenlignbar_returnererFalse() {
        boolean nssammenlignbar = Konverteringer.nssammenlignbar("0301", 7, 2015);
        assertFalse(nssammenlignbar);
    }

    @Test
    public void nestSitsteSammenlignbar_gittKommuneBydelBruddNestSistSammenlignbar_returnererFalse() {
        boolean nssammenlignbar = Konverteringer.nssammenlignbar("0301", 7, 2017);
        assertFalse(nssammenlignbar);
    }

    @Test
    public void nestSitsteSammenlignbar_gittKommuneBydelBruddFørNestSistSammenlignbar_returnererTrue() {
        boolean nssammenlignbar = Konverteringer.nssammenlignbar("0301", 7, 2019);
        assertTrue(nssammenlignbar);
    }
}
