package trains;

import TSim.*;

public class Train extends Thread {
    private static final int SPEED=20;

    private static TSimInterface tsi;
    int id;
    boolean forward=true;

    public static void main(String[] a) {
	tsi=TSimFactory.getTSimInterface();
	new Train(1).start();
    }

    public Train(int i) {
	id=i;
    }

    public void turn() {
	forward=!forward;
	setSpeed(id, 0);
	try {
	    Thread.currentThread().sleep(6000);
	} catch(InterruptedException ie) {
	    System.err.println("Unexpected interruption.");
	    System.exit(1);
	}
	if (forward)
	    setSpeed(id, SPEED);
	else
	    setSpeed(id, -SPEED);
    }

    public void run() {
	setSwitch(15, 10, TSimInterface.SWITCH_RIGHT);
	setSwitch(9, 6, TSimInterface.SWITCH_RIGHT);
	setSpeed(id, SPEED);
	while(true) {
	    try {
		SensorEvent se=tsi.getSensor(id);
		if (se.getStatus()==SensorEvent.ACTIVE) {
		    switch(se.getXpos()) {
			case 3:
			    if (forward)
				turn();
			    break;
			default:
			    if (!forward)
				turn();
		    }
		}
	    } catch (CommandException ce) {
		die(ce);
	    }
	}
    }

    private void setSpeed(int id, int speed) {
	try {
	    tsi.setSpeed(id, speed);
	} catch(CommandException ce) {
	    die(ce);
	}
    }

    private void setSwitch(int x, int y, int dir) {
	try {
	    tsi.setSwitch(x, y, dir);
	} catch(CommandException ce) {
	    die(ce);
	}
    }

    private void die(CommandException ce) {
	ce.printStackTrace();
	System.err.println(ce.getMessage());
	System.exit(1);	    
    }
}
