module Seeding
	module FairRankedSeeding
		def self.seed(tournament_stage)
			matches = tournament.current_stage.matches
			match = matches.first
			match_num = 0
			players_used = 0
			(tournament.players.count/tournament.min_players_per_team).floor.times do
				match.teams.push Team.create()
			end
			best_first(tournament).each_slice(tournament.min_teams_per_match) do |slice|
				(0..tournament.min_teams_per_match-1).each do |index|
					match.teams[index].players += slice[index]
				end
				players_used += 1
				if players_used == tournament.min_players_per_team
					match_num += 1
					match = matches[match_num]
					players_used = 0
				end
			end
		end

		private
		def self.best_first(tournament)
			tournament.players.sort {|a, b| better(a, b, tournament) }
		end

		def self.better(player1, player2, tournament)
			ps1 = previous_score(player1, tournament)
			ps2 = previous_score(player2, tournament)
			ps1 <=> ps2
		end

		def self.previous_score(player, tournament)
			score = tournament.statistics.where(match: player.matches.last, user: player, name: :score)
			if score.nil?
				return 0
			end
			score
		end
	end
end