package main

import (
	"errors"
	"flag"
	"fmt"
	"os"
	"strings"
	"time"
)

func main() {
	// FlagSet baru bernama "salin" dengan mode ContinueOnError
	// agar galat parsing bisa kita tangani sendiri.
	fs := flag.NewFlagSet("salin", flag.ContinueOnError)
	// Bantuan dan galat ditulis ke stdout supaya mudah dibaca pada demo.
	fs.SetOutput(os.Stdout)

	// Bentuk pointer: fs.String mengembalikan *string.
	verbose := fs.Bool("verbose", false, "tampilkan proses secara detail")
	nama := fs.String("nama", "Budi", "nama pengguna yang disapa")
	jumlah := fs.Int("jumlah", 1, "jumlah salinan laporan")
	// flag.Duration membaca durasi seperti 1500ms atau 2s.
	timeout := fs.Duration("timeout", 2*time.Second, "batas waktu proses")

	if err := fs.Parse(os.Args[1:]); err != nil {
		if errors.Is(err, flag.ErrHelp) {
			// Pengguna memakai -h atau --help: bukan galat.
			return
		}
		fmt.Fprintln(os.Stderr, "galat argument:", err)
		os.Exit(2)
	}

	fmt.Println("verbose :", *verbose)
	fmt.Println("nama    :", *nama)
	fmt.Println("jumlah  :", *jumlah)
	fmt.Println("timeout :", *timeout)

	sisa := fs.Args()
	if len(sisa) > 0 {
		fmt.Println("posisi  :", strings.Join(sisa, ", "))
	} else {
		fmt.Println("posisi  : (tidak ada)")
	}
}
