package main

import (
	"fmt"
	"strconv"
	"sort"
	"strings"
)

type Klasemen struct{
	poin map[string]int
}

func NewKlasemen(klub []string) *Klasemen{
	p := make(map[string]int)
	for _, k := range klub {
		p[k]=0
	}
	return &Klasemen{poin: p}
}

func (k *Klasemen) CatatPermainan(klubKandang, klubTandang, skor string){
	bagianSkor := strings.Split(skor,":")
	skorKandang, _ := strconv.Atoi(bagianSkor[0])
	skorTandang, _ := strconv.Atoi(bagianSkor[1])

	if skorKandang > skorTandang {
		k.poin [klubKandang] +=3
	}else if skorTandang > skorKandang {
		k.poin [klubTandang] +=3
	}else{
		k.poin [klubTandang] +=1
		k.poin [klubKandang] +=1
	}
}
type KlubPoin struct{
	Nama string
	Poin int
}
func (k *Klasemen) CetakKlasemen() map[string]int{
	return k.poin
}
func (k *Klasemen) AmbilPeringkat(nomorPeringkat int) string{
	var daftar []KlubPoin
	for nama,poin := range k.poin{
		daftar = append(daftar, KlubPoin{Nama: nama,Poin: poin})
	}
	
	sort.Slice(daftar, func(i, j int) bool {
		return daftar[i].Poin > daftar[j].Poin
	})

	indeks:= nomorPeringkat - 1
	if indeks >= 0 && indeks < len(daftar) {
		return daftar[indeks].Nama
	}
	return "" 
}

func main(){
	klasemen := NewKlasemen([]string{"Liverpool","Arsenal","Mancester United"})
	
	klasemen.CatatPermainan("Arsenal", "Liverpool", "2:1")
	klasemen.CatatPermainan("Arsenal", "Chelsea", "1:1")
	klasemen.CatatPermainan("Chelsea", "Arsenal", "0:3")
	klasemen.CatatPermainan("Chelsea", "Liverpool", "3:2")
	klasemen.CatatPermainan("Liverpool", "Arsenal", "2:2")
	klasemen.CatatPermainan("Liverpool", "Chelsea", "0:0")

	klasemen.CatatPermainan("Manchester United", "Liverpool", "3:0")
	klasemen.CatatPermainan("Manchester United", "Chelsea", "2:1")
	klasemen.CatatPermainan("Arsenal", "Manchester United", "0:1")

	fmt.Println("klasemen Akhir: ", klasemen.CetakKlasemen())
	fmt.Println("Peringkat 1: ", klasemen.AmbilPeringkat(1))
}