package de.wwwu.awolf.presenter.data.generator;

import de.wwwu.awolf.model.Line;

import java.security.SecureRandom;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
 *
 * @Author: Armin Wolf
 * @Email: a_wolf28@uni-muenster.de
 * @Date: 01.08.2017.
 */
public class DatasetGenerator {


    /**
     * Konstruktor
     */
    private DatasetGenerator() {

    }


    /**
     * Generieren eines Datensatzes des typen: Gerade. Die Geraden werden in eine
     * übergebene Liste hinzugefügt.
     *
     * @param n Größe des Datensatzes
     * @return Liste des Geraden
     */
    public static Set<Line> generateDataLines(Set<Line> lines, int n) {

        double m = 5d;
        double b = 0d;

        int size = 0;
        Map<Double, Double> points = new HashMap<>();

        //speichere die Koordinaten in einer HashMap, damit keine Punkte
        //entstehen deren x-Koordinate zu sehr beieinander liegt.
        SecureRandom random = new SecureRandom();
        while (size < n) {
            double y = random.nextGaussian();
            double signal = m * y + b;
            signal *= -1;

            if (!points.containsKey(y)) {
                points.put(y, signal);
                size++;
            }
        }

        int idx = lines.size();
        for (Map.Entry<Double, Double> d : points.entrySet()) {
            Line line = new Line(d.getKey(), d.getValue());
            line.setId(idx + "");
            lines.add(line);
            idx++;
        }

        return lines;
    }

}

