import java.io.*;
import java.net.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;

public class PrimitiveWebServer {

  public static void main(String args[]) throws Exception {
    int port = Integer.parseInt(args[0]);
    ServerSocket serverSocket = new ServerSocket(port);
    System.err.println("PrimitiveWebServer listening at port " + port);
    while (true) {
      Socket socket = serverSocket.accept();

      Thread networkListenThread = new Thread() {
        public void run() {
          try {
            PrintStream outputStream = new PrintStream(
              socket.getOutputStream()
            );
            Scanner scanner = new Scanner(socket.getInputStream());

            outputStream.println("HTTP/1.1 200 OK");
            outputStream.println("content-type: text/html; charset=UTF-8");
            outputStream.println("");
            outputStream.println("<html><body>");
            outputStream.println(
              "<h2>Generated by PrimitiveWebServer.java</h2>"
            );
            outputStream.println(
              "<p>Your browser sent the following request:</p>"
            );
            outputStream.println("<pre>");
            while (scanner.hasNextLine()) {
              String line = scanner.nextLine();
              outputStream.println(line);
              if (line.trim() == "") break;
            }
            outputStream.println("</pre>");
            outputStream.println("</body></html>");
            socket.close();
          } catch (IOException e) {
            System.err.println(e);
          }
        }
      };
      networkListenThread.start();
    }
  }

  public static String produceErrorPage(
    int code,
    String shortMessage,
    String message
  ) {
    return (
      "HTTP/1.1 " +
      code +
      " " +
      shortMessage +
      "\n\n" +
      "<html>\n<body>\n<h1>Error " +
      code +
      ": " +
      shortMessage +
      "</h1>\n" +
      "<p>" +
      message +
      "</p>\n" +
      "</body></html>"
    );
  }
}
