package main

import (
	"fmt"
	"net/http"
	"net/http/httptest"
	"net/url"
)

func main() {
	// Bagian 1: membedah anatomi sebuah URL dengan package net/url.
	alamat := "https://api.example.com:8443/v1/items?halaman=2&tag=go"
	u, err := url.Parse(alamat)
	if err != nil {
		fmt.Println("gagal mem-parse URL:", err)
		return
	}
	fmt.Println("URL     :", alamat)
	fmt.Println("skema   :", u.Scheme)
	fmt.Println("host    :", u.Host)
	fmt.Println("path    :", u.Path)
	fmt.Println("query   :", u.RawQuery)
	fmt.Println("halaman :", u.Query().Get("halaman"))

	// Bagian 2: satu siklus request-response tanpa jaringan nyata.
	handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "Halo, %s!", r.URL.Query().Get("nama"))
	})
	req := httptest.NewRequest(http.MethodGet, "/sapa?nama=Budi", nil)
	rec := httptest.NewRecorder()

	handler.ServeHTTP(rec, req)

	fmt.Println("request :", req.Method, req.RequestURI, req.Proto)
	fmt.Println("respons :", rec.Code, rec.Header().Get("Content-Type"))
	fmt.Println("body    :", rec.Body.String())
}
