package main

import (
	"fmt"
	"os"
	"sort"
	"strings"
)

func main() {
	// os.Args[0] berisi nama program; argumen pengguna mulai dari indeks 1.
	argumen := os.Args[1:]
	fmt.Println("jumlah argumen:", len(argumen))
	for indeks, nilai := range argumen {
		fmt.Printf("argumen[%d] = %s\n", indeks, nilai)
	}

	// Setenv membuat variabel lingkungan, Getenv membaca nilainya.
	os.Setenv("NAMA_APLIKASI", "kasir")
	fmt.Println("getenv NAMA_APLIKASI:", os.Getenv("NAMA_APLIKASI"))
	fmt.Printf("getenv VARIABEL_TIDAK_ADA: %q\n", os.Getenv("VARIABEL_TIDAK_ADA"))

	// LookupEnv melaporkan apakah variabel benar-benar ada.
	os.Setenv("MODE_APLIKASI", "produksi")
	mode, ada := os.LookupEnv("MODE_APLIKASI")
	fmt.Printf("lookupenv MODE_APLIKASI: %q ada: %v\n", mode, ada)

	kosong, hilang := os.LookupEnv("VARIABEL_TIDAK_ADA")
	fmt.Printf("lookupenv VARIABEL_TIDAK_ADA: %q ada: %v\n", kosong, hilang)

	// os.Environ memuat semua variabel; saring milik kita lalu urutkan.
	os.Setenv("PELATIHAN_KOTA", "Bandung")
	os.Setenv("PELATIHAN_MATERI", "standard library")
	terpilih := []string{}
	for _, kv := range os.Environ() {
		if strings.HasPrefix(kv, "PELATIHAN_") {
			terpilih = append(terpilih, kv)
		}
	}
	sort.Strings(terpilih)
	fmt.Println("environ terfilter:", strings.Join(terpilih, ", "))

	// os.Stdout bertipe *os.File dan memenuhi io.Writer.
	fmt.Fprintf(os.Stdout, "fmt.Fprintf ke os.Stdout berhasil\n")

	// os.Exit menghentikan program seketika; defer tidak dijalankan.
	defer fmt.Println("baris defer ini tidak pernah tercetak")
	fmt.Println("program selesai")
	os.Exit(0)
}
