package impl;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;

import interfaces.AlgoDiffusion;
import interfaces.ObserverDeCapteurAsync;

public class DiffusionSequentielle implements AlgoDiffusion {

    public CapteurImpl capteur;
    private List<Future<?>> futures;
    private int value;

    public DiffusionSequentielle(CapteurImpl c){
        this.capteur = c;
        this.futures = new ArrayList<Future<?>>();
    }

    @Override
    public int getValue(){
        return this.value;
    }

    @Override
    public void execute() {

        if(!this.futures.isEmpty()){
            futures.removeIf(Future::isDone);
        }

        if(this.futures.isEmpty()){ //pas de else pour ne pas perdre 500ms à ne rien faire
            this.value = capteur.getValue();
            System.out.println("execute");
            for (ObserverDeCapteurAsync canal : capteur.observers) {
                Future<?> f = canal.update();
                this.futures.add(f);
            }
        }
    }
}
