package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	var wg sync.WaitGroup

	// fase 1: unduh empat berkas secara bersamaan
	tugas := []string{"unduh A", "unduh B", "unduh C", "unduh D"}
	status := make([]string, len(tugas))

	wg.Add(len(tugas))
	for i, nama := range tugas {
		go func() {
			defer wg.Done()
			time.Sleep(20 * time.Millisecond) // simulasi unduhan
			status[i] = nama + " berhasil"
		}()
	}

	wg.Wait()
	for _, s := range status {
		fmt.Println(s)
	}

	// fase 2: verifikasi hasil, WaitGroup yang sama dipakai ulang
	verifikasi := make([]string, 2)
	wg.Add(2)
	for i := range 2 {
		go func() {
			defer wg.Done()
			time.Sleep(10 * time.Millisecond) // simulasi pemeriksaan
			verifikasi[i] = fmt.Sprintf("verifikasi %d lolos", i+1)
		}()
	}

	wg.Wait()
	for _, v := range verifikasi {
		fmt.Println(v)
	}
	fmt.Println("semua tugas selesai")
}
