package ch.epfl.isochrone.timetable;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestTimeTableReader {
    // Le "test" suivant n'en est pas un à proprement parler, raison pour
    // laquelle il est ignoré (annotation @Ignore). Son seul but est de garantir
    // que les noms des classes et méthodes sont corrects.
    @Test
    @Ignore
    public void namesAreOk() throws IOException {
        TimeTableReader r = new TimeTableReader("");
        TimeTable t = r.readTimeTable();
        Graph g = r.readGraphForServices(t.stops(),
                Collections.<Service> emptySet(), 0, 0d);
        System.out.println(g); // Evite l'avertissement que g n'est pas utilisé
    }

    @Test
    public void readTimeTableIsOk() throws IOException {

        TimeTableReader ttr = new TimeTableReader("/time-table/");

        TimeTable tt = ttr.readTimeTable();

        Graph g = ttr.readGraphForServices(tt.stops(),
                tt.servicesForDate(new Date(1, 10, 2013)), 500, 1.25);

        Stop sto = null;
        Stop sto2 = null;
        for (Stop s : tt.stops()) {
            if (s.name().equals("EPFL")) {
                sto = s;
            }
            if (s.name().equals("Bassenges")) {
                sto2 = s;
            }
        }

        FastestPathTree fpt = g.fastestPaths(sto, 0);

        List<Stop> pt = new ArrayList<Stop>();

        pt.add(sto);
        pt.add(sto2);

        assertEquals(fpt.pathTo(sto2), pt);

        fpt = g.fastestPaths(sto2, 0);

        pt = new ArrayList<Stop>();

        pt.add(sto2);
        pt.add(sto);

        assertEquals(fpt.pathTo(sto), pt);

    }
}
