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

import com.opencsv.CSVWriter;
import de.wwwu.awolf.model.Line;
import de.wwwu.awolf.presenter.util.Logging;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Set;

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

    private Set<Line> lines;
    private File file;

    /**
     * Konstruktor
     *
     * @param lines Liste der Geraden
     * @param file  Datei in die, die Informationen exportiert werden sollen
     */
    public DataExporter(Set<Line> lines, File file) {
        this.file = file;
        this.lines = lines;
    }

    /**
     * Diese Methode schreibt die Geraden der Form: y = mx + b, in eine Komma-Separierte Datei (CSV).
     * Der Aufbau der Datei ist: id, m, b. Wenn der Export beendet wurde wird die Beobachter-Klasse informiert.
     * In diesem Fall ist dies die Presenter Klasse.
     */
    @Override
    public void run() {
        CSVWriter writer = null;

        try {
            writer = new CSVWriter(new FileWriter(file));
            String[] entries = new String[3];
            for (Line line : lines) {
                entries[0] = line.getId();
                entries[1] = line.getM().toString();
                double tmp = (-1) * line.getB();
                entries[2] = Double.toString(tmp);
                writer.writeNext(entries);
            }
            writer.close();

        } catch (IOException e) {
            Logging.logError(e.getMessage(), e);
        }

        Logging.logInfo("The model has been successfully saved under: " + file.getAbsolutePath() + ".");
    }
}
