package atmsdriver.model;

import atmsdriver.ATMSDriver;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import junit.framework.TestCase;

/**
 *
 * @author jdalbey
 */
public class HighwaysTest extends TestCase {

    public HighwaysTest(String testName) {
        super(testName);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        PrintWriter writer = null;
        try {
            writer = new PrintWriter(new FileWriter("test/atmsdriver/model/ldssample.txt"));
            writer.println("2");
            writer.println("32 0 2");
            writer.println("1210831 1 5 S 0.9 8 CALAFIA");
            writer.println("1210832 ML ML_1");
            writer.println("1210833 ML ML_2");
            writer.println("1210834 ML ML_3");
            writer.println("1210835 ML ML_4");
            writer.println("1210836 PA PASSAGE");
            writer.println("1210837 DM DEMAND");
            writer.println("1210838 QU QUEUE");
            writer.println("1210839 FR RAMP_OFF");
            writer.println("1210845 2 5 S 1.49 9 EL CAMINO REAL");
            writer.println("1210846 ML ML_1");
            writer.println("1210847 ML ML_2");
            writer.println("1210848 ML ML_3");
            writer.println("1210849 ML ML_4");
            writer.println("1210850 OR RAMP_ON");
            writer.println("1210851 PA PASSAGE");
            writer.println("1210853 DM DEMAND");
            writer.println("1210854 QU QUEUE");
            writer.println("1210855 FR RAMP_OFF");
            writer.println("74 0 1");
            writer.println("1204203 2 5 N 1.26 13 MAGDALENA");
            writer.println("1204205 OR RAMP_ON");
            writer.println("1204206 QU QUEUE");
            writer.println("1204207 DM DEMAND");
            writer.println("1204208 PA PASSAGE");
            writer.println("1204210 FR RAMP_OFF");
            writer.println("1204212 ML ML_1");
            writer.println("1204213 ML ML_2");
            writer.println("1204214 ML ML_3");
            writer.println("1204215 ML ML_4");
            writer.println("1204217 OS OS_1");
            writer.println("1204218 OS OS_2");
            writer.println("1204219 OS OS_3");
            writer.println("1204220 OS OS_4");
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
        Path path = FileSystems.getDefault().getPath("test/atmsdriver/model", "ldssample.txt");
        Files.delete(path);
    }

    /**
     * Test of toString method
     */
    public void testToString() {
        System.out.println("toString");
        Highways highways = new Highways(
                "config/vds_data/highways_fullmap.txt",
                "localhost", 8080);
        highways.getHighwayByRouteNumber(5).stations.get(0).loops.get(0).vol = 1;
        String result = highways.toString();
        System.out.println(result);
        assertTrue(result.startsWith(expToString1));
        highways.applyColorToHighwayStretch(241, Station.DIRECTION.NORTH, 20.13, 4.0, LoopDetector.DOTCOLOR.RED);
        result = highways.toString();
        assertEquals("241 N @@ @@@@@-",result.substring(0,15));
    }
    String expToString1 = 
    "241 N -- ------ -- ------- -------------------------------------  \n" +
"241 S   - --- --  --------- ------------------------------------  \n" +
"  5 N  - - ------ ---  --- -- --- ----  - -- - -  -- - - -    -- -- - ---- -- -- --- - - -- -  ----- ----- --- -  - -- --  - - ---- - - - ------- \n" +
"  5 S @--";

    public void testToJson() {
        System.out.println("toJson");
        Highways highways = new Highways(
                "test/atmsdriver/model/ldssample.txt",
                "localhost", 8080);
        String result = highways.toJson();
        System.out.println(result);
        assertTrue(result.indexOf("33.416348") > 0);
    }
   
    public void testApplyColor()
    {
        System.out.println("apply color");
        Highways highways = new Highways(
            "test/atmsdriver/model/ldssample.txt",
            "localhost", 8080);
        highways.applyColorToHighwayStretch(5, Station.DIRECTION.SOUTH, 0.9, 2.0, LoopDetector.DOTCOLOR.RED);
        String result = highways.toString();
        assertEquals("5 S @@@", result.trim());
        highways.applyColorToHighwayStretch(241, Station.DIRECTION.NORTH, 20.13, 4.0, LoopDetector.DOTCOLOR.RED);
        result = highways.toString();
        assertEquals("241 N @@ @@@@@-",result.substring(0,15));

    }            
    
    public void testToCondensedFormat()
    {
        System.out.println("ToCondensedFormat");
        Highways highways = new Highways(
                "test/atmsdriver/model/ldssample.txt",
                "localhost", 8080);

        String actualCondensedFormatMeta = highways.toCondensedFormat(true);
        String actualCondensedFormatFEP = highways.toCondensedFormat(false);
        
        assertEquals(expectedCondensedFormatFEP, actualCondensedFormatFEP);
        assertEquals(expectedCondensedFormatMeta, actualCondensedFormatMeta);
    }
    String expectedCondensedFormatMeta = 
            "2\n" +
            "32 0 2\n" +
            "1210831 1 5 S 0.9 8 CALAFIA\n" +
            "1210832 ML_1\n" +
            "1210833 ML_2\n" +
            "1210834 ML_3\n" +
            "1210835 ML_4\n" +
            "1210836 PASSAGE\n" +
            "1210837 DEMAND\n" +
            "1210838 QUEUE\n" +
            "1210839 RAMP_OFF\n" +
            "1210845 2 5 S 1.49 9 EL CAMINO REAL\n" +
            "1210846 ML_1\n" +
            "1210847 ML_2\n" +
            "1210848 ML_3\n" +
            "1210849 ML_4\n" +
            "1210850 RAMP_ON\n" +
            "1210851 PASSAGE\n" +
            "1210853 DEMAND\n" +
            "1210854 QUEUE\n" +
            "1210855 RAMP_OFF\n" +
            "74 0 1\n" +
            "1204203 2 5 N 1.26 13 MAGDALENA\n" +
            "1204205 RAMP_ON\n" +
            "1204206 QUEUE\n" +
            "1204207 DEMAND\n" +
            "1204208 PASSAGE\n" +
            "1204210 RAMP_OFF\n" +
            "1204212 ML_1\n" +
            "1204213 ML_2\n" +
            "1204214 ML_3\n" +
            "1204215 ML_4\n" +
            "1204217 OS_1\n" +
            "1204218 OS_2\n" +
            "1204219 OS_3\n" +
            "1204220 OS_4\n";
    String expectedCondensedFormatFEP = 
            "2\n" +
            "32 0 2\n" +
            "1210831 1 5 S 0.9 8 \n" +
            "1210832  0.0 0 ML_1\n" +
            "1210833  0.0 0 ML_2\n" +
            "1210834  0.0 0 ML_3\n" +
            "1210835  0.0 0 ML_4\n" +
            "1210836  0.0 0 PASSAGE\n" +
            "1210837  0.0 0 DEMAND\n" +
            "1210838  0.0 0 QUEUE\n" +
            "1210839  0.0 0 RAMP_OFF\n" +
            "1210845 2 5 S 1.49 9 \n" +
            "1210846  0.0 0 ML_1\n" +
            "1210847  0.0 0 ML_2\n" +
            "1210848  0.0 0 ML_3\n" +
            "1210849  0.0 0 ML_4\n" +
            "1210850  0.0 0 RAMP_ON\n" +
            "1210851  0.0 0 PASSAGE\n" +
            "1210853  0.0 0 DEMAND\n" +
            "1210854  0.0 0 QUEUE\n" +
            "1210855  0.0 0 RAMP_OFF\n" +
            "74 0 1\n" +
            "1204203 2 5 N 1.26 13 \n" +
            "1204205  0.0 0 RAMP_ON\n" +
            "1204206  0.0 0 QUEUE\n" +
            "1204207  0.0 0 DEMAND\n" +
            "1204208  0.0 0 PASSAGE\n" +
            "1204210  0.0 0 RAMP_OFF\n" +
            "1204212  0.0 0 ML_1\n" +
            "1204213  0.0 0 ML_2\n" +
            "1204214  0.0 0 ML_3\n" +
            "1204215  0.0 0 ML_4\n" +
            "1204217  0.0 0 OS_1\n" +
            "1204218  0.0 0 OS_2\n" +
            "1204219  0.0 0 OS_3\n" +
            "1204220  0.0 0 OS_4\n";
    
    /**
     * Test of toXML method
     */
    public void testToXML() {
        System.out.println("toXML");
        Highways highways = new Highways(
                "test/atmsdriver/model/ldssample.txt",
                "localhost", 8080);
        String result = highways.toXML();
        assertEquals(expXMLResult, result);
    }
String expXMLResult =
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
"<Network>\n" +
"  <Line>\n" +
"    <Line_Num>32</Line_Num>\n" +
"    <Count>0</Count>\n" +
"    <Stations>\n" +
"      <Station>\n" +
"        <LDS_ID>1210831</LDS_ID>\n" +
"        <Line_Num>32</Line_Num>\n" +
"        <Drop>1</Drop>\n" +
"        <Location>CALAFIA</Location>\n" +
"        <Post_Mile>0.9</Post_Mile>\n" +
"        <Direction>S</Direction>\n" +
"        <Freeway>5</Freeway>\n" +
"        <ML_Tot_Vol>0</ML_Tot_Vol>\n" +
"        <Opp_Tot_Vol>0</Opp_Tot_Vol>\n" +
"        <Loops>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210832</Loop_ID>\n" +
"            <Loop_Location>ML_1</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210833</Loop_ID>\n" +
"            <Loop_Location>ML_2</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210834</Loop_ID>\n" +
"            <Loop_Location>ML_3</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210835</Loop_ID>\n" +
"            <Loop_Location>ML_4</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210836</Loop_ID>\n" +
"            <Loop_Location>PASSAGE</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210837</Loop_ID>\n" +
"            <Loop_Location>DEMAND</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210838</Loop_ID>\n" +
"            <Loop_Location>QUEUE</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210839</Loop_ID>\n" +
"            <Loop_Location>RAMP_OFF</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"        </Loops>\n" +
"      </Station>\n" +
"      <Station>\n" +
"        <LDS_ID>1210845</LDS_ID>\n" +
"        <Line_Num>32</Line_Num>\n" +
"        <Drop>2</Drop>\n" +
"        <Location>EL CAMINO REAL</Location>\n" +
"        <Post_Mile>1.49</Post_Mile>\n" +
"        <Direction>S</Direction>\n" +
"        <Freeway>5</Freeway>\n" +
"        <ML_Tot_Vol>0</ML_Tot_Vol>\n" +
"        <Opp_Tot_Vol>0</Opp_Tot_Vol>\n" +
"        <Loops>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210846</Loop_ID>\n" +
"            <Loop_Location>ML_1</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210847</Loop_ID>\n" +
"            <Loop_Location>ML_2</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210848</Loop_ID>\n" +
"            <Loop_Location>ML_3</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210849</Loop_ID>\n" +
"            <Loop_Location>ML_4</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210850</Loop_ID>\n" +
"            <Loop_Location>RAMP_ON</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210851</Loop_ID>\n" +
"            <Loop_Location>PASSAGE</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210853</Loop_ID>\n" +
"            <Loop_Location>DEMAND</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210854</Loop_ID>\n" +
"            <Loop_Location>QUEUE</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1210855</Loop_ID>\n" +
"            <Loop_Location>RAMP_OFF</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"        </Loops>\n" +
"      </Station>\n" +
"    </Stations>\n" +
"  </Line>\n" +
"  <Line>\n" +
"    <Line_Num>74</Line_Num>\n" +
"    <Count>0</Count>\n" +
"    <Stations>\n" +
"      <Station>\n" +
"        <LDS_ID>1204203</LDS_ID>\n" +
"        <Line_Num>74</Line_Num>\n" +
"        <Drop>2</Drop>\n" +
"        <Location>MAGDALENA</Location>\n" +
"        <Post_Mile>1.26</Post_Mile>\n" +
"        <Direction>N</Direction>\n" +
"        <Freeway>5</Freeway>\n" +
"        <ML_Tot_Vol>0</ML_Tot_Vol>\n" +
"        <Opp_Tot_Vol>0</Opp_Tot_Vol>\n" +
"        <Loops>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204205</Loop_ID>\n" +
"            <Loop_Location>RAMP_ON</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204206</Loop_ID>\n" +
"            <Loop_Location>QUEUE</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204207</Loop_ID>\n" +
"            <Loop_Location>DEMAND</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204208</Loop_ID>\n" +
"            <Loop_Location>PASSAGE</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204210</Loop_ID>\n" +
"            <Loop_Location>RAMP_OFF</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204212</Loop_ID>\n" +
"            <Loop_Location>ML_1</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204213</Loop_ID>\n" +
"            <Loop_Location>ML_2</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204214</Loop_ID>\n" +
"            <Loop_Location>ML_3</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204215</Loop_ID>\n" +
"            <Loop_Location>ML_4</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204217</Loop_ID>\n" +
"            <Loop_Location>OS_1</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204218</Loop_ID>\n" +
"            <Loop_Location>OS_2</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204219</Loop_ID>\n" +
"            <Loop_Location>OS_3</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"          <Loop>\n" +
"            <Loop_ID>1204220</Loop_ID>\n" +
"            <Loop_Location>OS_4</Loop_Location>\n" +
"            <Vol>0</Vol>\n" +
"            <Occ>0.0</Occ>\n" +
"          </Loop>\n" +
"        </Loops>\n" +
"      </Station>\n" +
"    </Stations>\n" +
"  </Line>\n" +
"</Network>\n";
}
