import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.GeneralPath;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.imageio.ImageIO;

public class PathDraw {
	public static void main(String[] args) {
		if (args.length < 2) {
			System.out.println(PathDraw.class.getSimpleName()
					+ " <eingabedatei> <ausgabedatei>");
			System.exit(1);
		}
		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					new FileInputStream(args[0])));
			int lineNumber = 0;
			String line = reader.readLine();
			Point groesse = getKoordinaten(line, lineNumber++);
			System.out.println("Dateigröße: "+groesse.x+"x"+groesse.y);
			GeneralPath pfad = new GeneralPath();
			boolean first = true;
			while ((line = reader.readLine()) != null) {
				if (line.trim().equals("")) {
					continue;
				}
				System.out.println("Lese Position "+line);
				Point position = getKoordinaten(line, lineNumber++);
				if (first) {
					pfad.moveTo(position.getX(), position.getY());
					first = false;
				} else {
					pfad.lineTo(position.getX(), position.getY());
				}
			}
			reader.close();
			BufferedImage image = new BufferedImage(groesse.x, groesse.y,
					BufferedImage.TYPE_INT_ARGB);
			Graphics2D canvas = (Graphics2D) image.getGraphics();
			canvas.setColor(Color.RED);
			canvas.draw(pfad);
			try {
				ImageIO.write(image, "png", new File(args[1]));
				System.out.println("Schreiben der Datei erfolgreich!");
			} catch (IOException ioe) {
				System.exit(2);
				System.err.println("Fehler beim schreiben der Ausgabedatei! "
						+ ioe);
			}
		} catch (Exception e) {
			System.err
					.println("Eingabedatei konnte nicht gefunden werden, oder es trat ein Fehler beim Lesen auf! Fehler: "
							+ e);
			System.exit(3);
		}
	}

	private static Point getKoordinaten(String line, int lineNumber) {
		String[] split = line.split(",");
		if (split.length < 2) {
			throw new RuntimeException("Fehler in Zeile " + lineNumber
					+ " Format muß x,y sein!");
		}
		try {
			int x = Integer.parseInt(split[0]);
			int y = Integer.parseInt(split[1]);
			return new Point(x, y);
		} catch (NumberFormatException nfe) {
			throw new RuntimeException("Fehler in Zeile " + lineNumber
					+ " ungültiges Zahlenformat! Problem: "
					+ nfe.getLocalizedMessage());
		}
	}
}
