package day09

// Returns the winning player's index and score
func PlayGame(numPlayers, finNum int) (int, int) {
	players := make([]int, numPlayers)

	// initialize the 'board'
	currentMarble := &Marble{Number: 0}
	currentMarble.CW = currentMarble
	currentMarble.CCW = currentMarble

	currentPlayer := 0
	for i := 1; currentMarble.Number < finNum; i++ {
		var score int
		currentMarble, score = currentMarble.PlaceNewMarble(i)
		players[currentPlayer] += score

		currentPlayer++
		if currentPlayer >= len(players) {
			currentPlayer = 0
		}
	}

	return findWinnerData(players)
}

func findWinnerData(players []int) (int, int) {
	topScore := -1
	winner := -1

	for player, score := range players {
		if score > topScore {
			topScore = score
			winner = player
		}
	}

	return winner, topScore
}