package tourplaner.business;

import tourplaner.data.DbConnect;
import tourplaner.object.Log;
import tourplaner.object.Tour;
import tourplaner.ui.AlertHelper;
import tourplaner.ui.ProgressBar;

import javax.swing.*;
import java.io.*;
import java.util.ArrayList;

/**
 * Ist für das importieren und Exportieren der Daten zuständig
 */
public class Exporter {

    private ArrayList<Tour> touren;
    private String path;

    /**
     * Erstellt den Exporter mit dem gegebenen Path
     * @param path Gegebener Path
     */
    public Exporter(String path) {
        this.path = path;
    }

    /**
     * Führt den Export aus -> Holt daten, erstellt file
     * @throws IOException Fehler beim File erstellen
     */
    public void doExport() throws IOException {
        ProgressBar progressBar = new ProgressBar("Export...");
        int step = progressBar.getProgressSize(4, 100);
        ArrayList<Tour> data = new DbConnect().getAllTouren();

        progressBar.addProgress(step);
        FileWriter fileWriter = new FileWriter(EinheitenAdder.addJson(this.path));
        progressBar.addProgress(step);
        JsonHelper.getJsonFromObj(data, fileWriter);
        progressBar.addProgress(step);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        progressBar.setProgress(100);
        bufferedWriter.close();
    }

    /**
     * Führt den Imput aus -> File holen, Daten in db erstellen
     * @throws IOException Fehler beim File öffnen
     */
    public void doImport() {
        ProgressBar progressBar = new ProgressBar("Import...");
        try {
            this.touren = JsonHelper.getTourenFromJson(new FileReader(EinheitenAdder.addJson(this.path)));
            DbConnect dbConnect = new DbConnect();
            dbConnect.delAllData();
            progressBar.addProgress(5);
            int size = progressBar.getProgressSize(this.touren.size() * 3, 100);
            for (Tour tour:this.touren) {
                    new DirectionMap(tour.getStart(), tour.getZiel(), tour.getName());
                progressBar.addProgress(size);
                dbConnect.addTour(tour);
                progressBar.addProgress(size);
                ArrayList<Log> logs = tour.getLogs();
                for (Log log:logs) {
                    dbConnect.addLog(tour.getName(), log);
                }
                progressBar.addProgress(size);
            }
        } catch (IOException e) {
            LogHelper.error(e);
            progressBar.setProgress(100);
        }
        progressBar.setProgress(100);
    }
}
