package fr.uge.concurrence;

import java.util.ArrayList;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.LongStream;

public class TheLastOfUsTest {
	

	public static void main(String[] args) throws InterruptedException {
		var waitTillTheLast = new TheLastOfUs(4, 3);
		var nbThreads = 17;
		var threads = new ArrayList<Thread>();
		LongStream.range(0, nbThreads).forEach(id -> {
			threads.add(Thread.ofPlatform().name("T-" + id).start(() -> {

				var name = Thread.currentThread().getName();
				try {
					var time = ThreadLocalRandom.current().nextInt(500, 1500);
					Thread.sleep(time);

					System.out.println(name + " asks for his number");
					var tmp = waitTillTheLast.getNumber();
					var teamsToPrint = waitTillTheLast.numbersByThread().entrySet().stream()
							.map(e -> e.getKey().getName() + "=" + e.getValue()).toList();
					System.out.println(name + " got " + tmp + ", teams are " + teamsToPrint);
				} catch (InterruptedException e) {
					throw new AssertionError();
				} catch (IllegalStateException e) {
					System.out.println("Warning: " + name + " is late for the party");
				}
			}));
		});
	}
}