
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import javax.imageio.ImageIO;

/**
 * tracker mapper applet
 *
 * @author matecsaba
 */
public class trackMap {

    /**
     * this is needed for cli startup
     *
     * @param args command line parameters
     */
    public static void main(String[] args) {
        trackMap app = new trackMap();
        String a;
        try {
            ByteArrayOutputStream buf = new ByteArrayOutputStream();
            a = "" + app.getClass();
            a = app.httpRequest("http://localhost/" + a, "./" + a, "cli", "clibrowser", "user", args, buf);
            a = "type=" + a + "\r\ndata:\r\n" + buf.toString();
        } catch (Exception e) {
            a = "exception " + e.getMessage();
        }
        System.out.println(a);
    }

    /**
     * do one request
     *
     * @param url url of app
     * @param path path of app
     * @param peer client address
     * @param agent user agent
     * @param user auth data
     * @param par parameters
     * @param buf result buffer, if empty, pathname must present
     * @return [pathname"][file name.]extension
     * @throws Exception if something went wrong
     */
    public String httpRequest(String url, String path, String peer, String agent, String user, String[] par, ByteArrayOutputStream buf) throws Exception {
        try {
            int i = path.lastIndexOf("/");
            path = path.substring(0, i + 1);
            String s = par[0];
            i = s.lastIndexOf("=");
            s = s.substring(0, i);
            BufferedImage img = ImageIO.read(new File(path + s));
            for (int o = 1; o < par.length; o++) {
                s = par[o];
                i = s.lastIndexOf("=");
                s = s.substring(0, i);
                i = s.lastIndexOf("-");
                boolean up = s.substring(i + 1, s.length()).equals("up");
                s = s.substring(0, i);
                i = s.lastIndexOf("-");
                int y = Integer.parseInt(s.substring(i + 1, s.length()));
                s = s.substring(0, i);
                i = s.lastIndexOf("-");
                int x = Integer.parseInt(s.substring(i + 1, s.length()));
                s = s.substring(0, i);
                Graphics2D g2d = img.createGraphics();
                g2d.setBackground(Color.gray);
                g2d.setFont(new Font("Serif", Font.BOLD, 20));
                g2d.setPaint(Color.black);
                g2d.drawString(s, x - 1, y - 1);
                g2d.drawString(s, x - 1, y);
                g2d.drawString(s, x - 1, y + 1);
                g2d.drawString(s, x, y - 1);
                g2d.drawString(s, x, y + 1);
                g2d.drawString(s, x + 1, y - 1);
                g2d.drawString(s, x + 1, y);
                g2d.drawString(s, x + 1, y + 1);
                g2d.setPaint(up ? Color.green : Color.red);
                g2d.drawString(s, x, y);
                g2d.dispose();
            }
            ImageIO.write(img, "png", buf);
            return "png";
        } catch (Exception e) {
            buf.write("...exception happened...".getBytes());
            return "txt";
        }
    }

}
