public void ExecuteDraw()
{
PopulateUserRaffleTicketsList();
ApplyRulesForEvent();
List<UserEvent> raffle = GenerateRaffleTickets();
Random randomGenerator = new Random();
int availableSpots = NumberOfSpotsLeftForEvent();
raffle.RemoveAll(x => (!x.AcceptLessSpots && x.NumberOfSpots > availableSpots));
while (availableSpots > 0 && raffle.Count > 0)
{
int winnerNumber = randomGenerator.Next(raffle.Count());
UserEvent drawnParticipant = raffle.ElementAt(winnerNumber);
int numberOfSpotsGiven = CalculateNumberOfSpotsToGive(availableSpots, drawnParticipant.NumberOfSpots);
raffle.RemoveAll(x => x.UserEmail == drawnParticipant.UserEmail);
SaveWinner(drawnParticipant, numberOfSpotsGiven);
DeleteParticipant(drawnParticipant);
availableSpots -= numberOfSpotsGiven;
raffle.RemoveAll(x => (!x.AcceptLessSpots && x.NumberOfSpots > availableSpots));
}
}