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

import de.wwwu.awolf.model.Line;

import java.security.SecureRandom;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.Callable;

/**
 * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
 *
 * @Author: Armin Wolf
 * @Email: a_wolf28@uni-muenster.de
 * @Date: 01.08.2017.
 */
public class CloudDatasetGenerator implements Callable<Set<Line>> {

    private final int size;

    public CloudDatasetGenerator(int size) {
        this.size = size;
    }

    /**
     * Generiert zu einer gegebenen Größe einen Datensatz des typen: Punktwolke
     *
     * @return Liste der Geraden
     */
    public Set<Line> generateDataCloud() {
        Set<Line> lines = new HashSet<>();
        SecureRandom random = new SecureRandom();
        double m = 1 + random.nextDouble();
        double b = random.nextDouble();


        for (int i = 1; i < (size + 1); i++) {
            double y = (random.nextGaussian() * 100) % 100;
            double signal = m * i + b;
            signal *= -1;

            Line line = new Line(i, signal - y);
            line.setId(i - 1 + "");
            lines.add(line);
        }

        return lines;
    }

    @Override
    public Set<Line> call() throws Exception {
        return generateDataCloud();
    }
}

