
package tmcsim.utilities;

import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Scanner;

/**
 * Represent a single VDS, "a logical grouping of detectors" at a particular 
 * location in one direction.
 * @author jdalbey
 */
public final class VehicleDetectionStation
{
    public final String id;
    public final String fwy;
    public final String dir;
    public final String postmile;
    public final String latitude;
    public final String longitude;
    public final String type;   // type of lanes being monitored
    public final String street;
    private String station_address; 
    private List<String> laneList; // list of all lanes (loop detectors) that 
                                    // this VDS monitors.
    /**
     *  Constructor
     * @param lineScanner A Scanner that uses tab as a delimiter for a single
     * line of the vds meta file.
     */
    public VehicleDetectionStation(Scanner lineScanner)
    {
        id = lineScanner.next();
        fwy = lineScanner.next();
        dir = lineScanner.next();
        lineScanner.next(); // skip District
        lineScanner.next(); // skip Country
        lineScanner.next(); // skip City
        String raw_pm = lineScanner.next().trim();
        // remove any postmile prefix, if it exists.
        if (Character.isAlphabetic(raw_pm.charAt(0)))
        {
            raw_pm = raw_pm.substring(1);
        }
        postmile = raw_pm;
        lineScanner.next(); // skip Abs_PM
        latitude = lineScanner.next(); 
        longitude = lineScanner.next(); 
        lineScanner.next();   // skip length
        type = lineScanner.next();   // skip type
        lineScanner.next(); // skip lanes
        street = lineScanner.next();  // TODO read street name correctly
        laneList = new ArrayList<String>(); // list of lane descriptors    
    }   
    public void setStaAddr(String address)
    {
        this.station_address = address;
    }
    public String getStaAddr()
    {
        return this.station_address;
    }
    public void addLane(String laneDescription)
    {
        this.laneList.add(laneDescription);
    }
    public List getLaneList()
    {
        return laneList;
    }
    
    @Override
    public String toString()
    {
        return station_address + " " + fwy + " " + dir + " " + postmile;
    }
}
