package main

import (
	"fmt"
	"os"
	"strings"
	"text/tabwriter"
)

const (
	hijau = "\x1b[32m"
	merah = "\x1b[31m"
	reset = "\x1b[0m"
)

func main() {
	// 1. Kolom berlebar tetap dengan fmt.Printf.
	fmt.Printf("%-12s %6s %s\n", "NAMA", "STOK", "STATUS")
	fmt.Printf("%-12s %6d %s\n", "kopi", 12, "laku")
	fmt.Printf("%-12s %6d %s\n", "teh melati", 3, "hampir habis")

	// 2. Tabel rapi dengan text/tabwriter.
	w := tabwriter.NewWriter(os.Stdout, 0, 4, 2, ' ', 0)
	fmt.Fprintln(w, "SERVER\tPROSES\tSTATUS")
	fmt.Fprintln(w, "web-1\thttp\t[OK]")
	fmt.Fprintln(w, "db-primary\tpostgres\t[OK]")
	fmt.Fprintln(w, "cache\tredis\t[GAGAL]")
	w.Flush()

	// 3. Prefix status dengan warna (konvensi NO_COLOR dihormati).
	if os.Getenv("NO_COLOR") == "" {
		fmt.Printf("%s[OK]%s konfigurasi valid\n", hijau, reset)
		fmt.Printf("%s[GAGAL]%s koneksi database terputus\n", merah, reset)
	} else {
		fmt.Println("[OK] konfigurasi valid")
		fmt.Println("[GAGAL] koneksi database terputus")
	}

	// 4. Representasi mentah escape sequence dengan %q.
	fmt.Printf("repr ok    : %q\n", hijau+"[OK]"+reset)
	fmt.Printf("repr gagal : %q\n", merah+"[GAGAL]"+reset)

	// 5. Progress bar sederhana dengan karakter #.
	total := 5
	for i := 1; i <= total; i++ {
		persen := i * 100 / total
		penuh := i * 20 / total
		fmt.Printf("memproses [%-20s] %3d%%\n", strings.Repeat("#", penuh), persen)
	}
}
