package tourplaner.business;

import org.apache.log4j.Logger;
import org.apache.pdfbox.exceptions.COSVisitorException;
import tourplaner.data.DbConnect;
import tourplaner.data.PostgresHelper;
import tourplaner.object.Log;
import tourplaner.object.Tour;

import java.io.IOException;
import java.util.ArrayList;

/**
 * Haupt Logik des Tourplaners
 */
public class TourPlaner{
    private Logger logger;

    /**
     * Erstellt alle DB Tabellen falls nötig
     */
    public static void init(){
        new DbConnect().init();
    }

    /**
     * Holt alle touren aus der DB 
     * @return Alle touren als ArrayList
     */
    public static ArrayList<Tour> getAllTours(){
        return new DbConnect().getAllTouren();
    }

    /**
     * Bearbeitet eine Tour
     * @param oldname Alter Tourname
     * @param tour Neuer Tourname
     * @return false bei error
     */
    public static boolean editTour(String oldname, Tour tour){
        return new DbConnect().editTour(oldname, tour);
    }

    public static boolean delTour(String tourname){
        return new DbConnect().delTour(tourname);
    }

    /**
     * Fügt eine Tour hinzu
     * @param newTour Neue Tour
     * @return false bei error
     */
    public static boolean addTour(Tour newTour){
        return new DbConnect().addTour(newTour);
    }


    public static ArrayList<Log> getLogs(String tourname){
        return new DbConnect().getLogs(tourname);
    }

    public static void doReport(String tourname){
        try {
            Reporter.createTourReport(tourname);
        } catch (IOException e) {
            LogHelper.error(e.getMessage(), e.getClass().getName());
        } catch (COSVisitorException e) {
            LogHelper.error(e.getMessage(), e.getClass().getName());
        }
    }

    public static boolean addLog(String tourname, Log log){
        if(Double.isInfinite(log.getAvgspeed())) log.setAvgspeed(-1.0);
        return new DbConnect().addLog(tourname, log);
    }

    public static boolean delLog(String tourname, String id){
        return new DbConnect().delLog(tourname, id);
    }

    public static boolean editLog(String tourname, Log log){
        if(Double.isInfinite(log.getAvgspeed())) log.setAvgspeed(-1.0);
        return new DbConnect().editLog(tourname, log);
    }


    public static String getMapJson(String start, String ziel){
        // TODO: 14.04.2021 Map Quest
        return start + " " + ziel;
    }
}
