// Khu 2012-01-21
// Origin CarThread, thread parts extracted into CarThread2.


// Argument 1: Anzahl der Autos
// Argument 2: Anzahl der Parkplätze im Parkhaus
// Argument 3: Anzahl der Wiederholungen, die ein Auto parken gehen soll
// Argument 4: Fahr- und Parkzeit [s] eines Autos

public class CarSimulation
{
    private static int numberOfCarThreads = 100;
    private static int capacity = 20;
    private static int numberOfIterations = 10; // Wie oft ein Auto parken geht
    private static int millis = 1;         // Werte zwischen 1-300 sinnvoll

    public static void main (String[] args)
    {
	try
	{
            if (args.length > 0)
            {
                numberOfCarThreads = Integer.parseInt(args[0]);
		if (args.length > 1)
		{
                    capacity = Integer.parseInt(args[1]);
                    if (args.length > 2)
                    {
                        numberOfIterations = Integer.parseInt(args[2]);
			if (args.length > 3)
			{
                            millis = Integer.parseInt(args[3]);
			}
                    }
		}
            }
	}
	catch(NumberFormatException e)
	{
            System.out.println
                ("If 1 or 2 arguments, then posivtive integer expected! --- " +
                 e.toString());
	}
	CarPark carPark = new CarPark(capacity);

	System.out.println
            ("Cars: " + numberOfCarThreads + "; Capacity: " + capacity + 
             "; Iterations: " + numberOfIterations +
             "; Driving and Parking Time [ms]: " + millis);

	for (int i = 0; i < numberOfCarThreads; ++i)
	{
            Thread carThread = CarThread2.newCarThread(i+1, carPark);
            carThread.start();
	}
    }
}