package main

import "fmt"

type Kebutuhan struct {
	UkuranTim          int  // jumlah developer aktif
	KompleksitasDomain int  // skala 0-10
	DeployIndependen   bool // perlu rilis terpisah per komponen?
}

func Skor(k Kebutuhan) int {
	return k.UkuranTim*2 + k.KompleksitasDomain
}

func Rekomendasi(k Kebutuhan) string {
	switch {
	case k.UkuranTim <= 2 && k.KompleksitasDomain <= 3:
		return "flat: satu package main, fungsi dipisah per file"
	case Skor(k) <= 15 && !k.DeployIndependen:
		return "layered: handler, service, repository"
	case Skor(k) <= 30 && !k.DeployIndependen:
		return "modular monolith: satu binary, modul per area di internal/"
	default:
		return "evaluasi microservice: hanya bila deploy independen benar-benar dibutuhkan"
	}
}

func main() {
	profil := []struct {
		nama string
		keb  Kebutuhan
	}{
		{"proyek belajar pribadi", Kebutuhan{UkuranTim: 1, KompleksitasDomain: 2}},
		{"aplikasi internal perusahaan", Kebutuhan{UkuranTim: 4, KompleksitasDomain: 6}},
		{"platform multi-tim", Kebutuhan{UkuranTim: 12, KompleksitasDomain: 8, DeployIndependen: true}},
	}
	for _, p := range profil {
		fmt.Printf("%-30s -> %s\n", p.nama, Rekomendasi(p.keb))
	}
}
