package main

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

type Klasemen struct {
	poin map[string]int
}

func NewKlasemen(clubs []string) *Klasemen {
	k := &Klasemen{
		poin: make(map[string]int),
	}

	for _, club := range clubs {
		k.poin[club] = 0
	}

	return k
}

func (k *Klasemen) CatatPermainan(kandang, tandang, skor string) {
	hasil := strings.Split(skor, ":")

	skorKandang, _ := strconv.Atoi(hasil[0])
	skorTandang, _ := strconv.Atoi(hasil[1])

	if skorKandang > skorTandang {
		k.poin[kandang] += 3
	} else if skorKandang < skorTandang {
		k.poin[tandang] += 3
	} else {
		k.poin[kandang]++
		k.poin[tandang]++
	}
}

func (k *Klasemen) CetakKlasemen() map[string]int {
	return k.poin
}

func (k *Klasemen) AmbilPeringkat(rank int) string {
	type Club struct {
		nama string
		poin int
	}

	var clubs []Club

	for nama, poin := range k.poin {
		clubs = append(clubs, Club{nama, poin})
	}

	sort.Slice(clubs, func(i, j int) bool {
		if clubs[i].poin == clubs[j].poin {
			return clubs[i].nama < clubs[j].nama
		}
		return clubs[i].poin > clubs[j].poin
	})

	if rank < 1 || rank > len(clubs) {
		return ""
	}

	return clubs[rank-1].nama
}

func main() {
	klasemen := NewKlasemen([]string{"Liverpool", "Chelsea", "Arsenal"})

	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")

	fmt.Println(klasemen.CetakKlasemen())
	fmt.Println(klasemen.AmbilPeringkat(1))
	fmt.Println(klasemen.AmbilPeringkat(2))
}
