import com.sun.net.httpserver.HttpServer;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;

public class LaporanStatus {
    public static void main(String[] args) throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress("127.0.0.1", 0), 0);
        server.createContext("/daftar", exchange -> {
            if (exchange.getRequestMethod().equals("POST")) {
                byte[] body = "{\"id\":42}".getBytes(StandardCharsets.UTF_8);
                exchange.getResponseHeaders().set("Location", "/daftar/42");
                exchange.sendResponseHeaders(201, body.length);
                try (OutputStream os = exchange.getResponseBody()) {
                    os.write(body);
                }
            } else {
                exchange.sendResponseHeaders(405, -1);
                exchange.close();
            }
        });
        server.start();

        String dasar = "http://127.0.0.1:" + server.getAddress().getPort();
        HttpClient klien = HttpClient.newHttpClient();
        try {
            HttpResponse<String> buat = klien.send(
                    HttpRequest.newBuilder(URI.create(dasar + "/daftar"))
                            .POST(HttpRequest.BodyPublishers.ofString("nama=Budi")).build(),
                    HttpResponse.BodyHandlers.ofString());
            System.out.println("POST /daftar : " + buat.statusCode()
                    + " sukses=" + (buat.statusCode() / 100 == 2)
                    + " location=" + buat.headers().firstValue("location").orElse("-")
                    + " body=" + buat.body());

            HttpResponse<String> ambil = klien.send(
                    HttpRequest.newBuilder(URI.create(dasar + "/daftar")).GET().build(),
                    HttpResponse.BodyHandlers.ofString());
            System.out.println("GET  /daftar : " + ambil.statusCode()
                    + " sukses=" + (ambil.statusCode() / 100 == 2));

            HttpResponse<String> hilang = klien.send(
                    HttpRequest.newBuilder(URI.create(dasar + "/hilang")).GET().build(),
                    HttpResponse.BodyHandlers.ofString());
            System.out.println("GET  /hilang : " + hilang.statusCode()
                    + " sukses=" + (hilang.statusCode() / 100 == 2));
        } finally {
            server.stop(0);
        }
    }
}
