package ecoparasite.representation;

import java.util.HashSet;
import java.util.function.Function;

/**
 * Représente un tuple de Valeurs X/Y pour nos données.
 * Ce type de données est utilisé lors de la conversion entre nos données et la partie SVG.
 */
public class ValeursXY {

    private double x;
    private double y;

    /**
     * Constructeur
     * @param x Notre valeur correspondant à l'axe X.
     * @param y Notre valeur correspondant à l'axe Y.
     */
    public ValeursXY(double x, double y){
        this.x = x;
        this.y = y;
    }

    public double getX() {
        return x;
    }
    public void setX(double x) {
        this.x = x;
    }
    public double getY() {
        return y;
    }
    public void setY(double y) {
        this.y = y;
    }

    /**
     * Permet de convertir un type de données en valeursXY.
     * @param list Notre liste de données de type T.
     * @param getX Notre getter pour notre valeur symbolisant X.
     * @param getY Notre getter pour notre valeur symbolisant Y.
     * @return Un HashSet de valeursXY.
     * @param <T> Le type de données qui vont être converties.
     * @param <V> Le type de données retournées comme un nombre.
     */
    public static <T,V extends Number> HashSet<ValeursXY> convertToXY(HashSet<T> list, Function<T,V> getX, Function<T,V> getY){
        HashSet<ValeursXY> xy = new HashSet<ValeursXY>();
        for(T item : list){
            if(getX.apply(item) != null && getY.apply(item) != null){
                xy.add( new ValeursXY(getX.apply(item).doubleValue(), getY.apply(item).doubleValue()));
            }
        }
        return xy;
    }

}
