package main

import (
	"encoding/json"
	"net/http"
	"strings"
)

// Pengguna adalah data yang dikirim handler sebagai JSON.
type Pengguna struct {
	Nama  string `json:"nama"`
	Email string `json:"email"`
}

// HandlerPengguna menangani GET /pengguna dan membalas satu data
// pengguna dalam format JSON.
func HandlerPengguna(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json")
	if r.Method != http.MethodGet {
		w.WriteHeader(http.StatusMethodNotAllowed)
		return
	}
	pengguna := Pengguna{Nama: "Budi", Email: "budi@example.com"}
	if err := json.NewEncoder(w).Encode(pengguna); err != nil {
		http.Error(w, "gagal menulis JSON", http.StatusInternalServerError)
	}
}

// HandlerCari menangani GET /cari?q=kata dan membalas JSON berisi
// nama produk yang mengandung kata kunci q.
func HandlerCari(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json")
	if r.Method != http.MethodGet {
		w.WriteHeader(http.StatusMethodNotAllowed)
		return
	}
	q := strings.TrimSpace(r.URL.Query().Get("q"))
	if q == "" {
		http.Error(w, "parameter q wajib diisi", http.StatusBadRequest)
		return
	}
	produk := []string{"Buku Tulis", "Buku Gambar", "Pensil"}
	var hasil []string
	for _, p := range produk {
		if strings.Contains(strings.ToLower(p), strings.ToLower(q)) {
			hasil = append(hasil, p)
		}
	}
	if err := json.NewEncoder(w).Encode(hasil); err != nil {
		http.Error(w, "gagal menulis JSON", http.StatusInternalServerError)
	}
}
