package tourplaner.object;

import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicReference;

/**
 * Model einer Tour
 */
public class Tour {
    private String dauer;
    private String mapJson;
    private String name;
    private String start;
    private String ziel;
    private double strecke;
    private ArrayList<Log> log;

    public Tour(String name, String dauer, String mapJson, double strecke, String start, String ziel) {
        this.dauer = dauer;
        this.mapJson = mapJson;
        this.strecke = strecke;
        this.name = name;
        this.start = start;
        this.ziel = ziel;
        this.log = new ArrayList<>();
    }

    public Tour(String name, String dauer, String mapJson, double strecke, String start, String ziel, ArrayList<Log> logs) {
        this.dauer = dauer;
        this.mapJson = mapJson;
        this.strecke = strecke;
        this.name = name;
        this.start = start;
        this.ziel = ziel;
        this.log = logs;
    }

    public void setLog(ArrayList<Log> log) {
        this.log = log;
    }

    /**
     * Holt einen einzigen Log Eintrag anhand der Id
     * @param id Id des Eintrags der zu besorgen ist
     * @return Der gefundene Log Eintrag
     */
    public Log getLog(String id){
        AtomicReference<Log> returnLog = new AtomicReference<>();
        this.log.forEach(s -> {
            if(s.getId().equals(id)){
                returnLog.set(s);
            }
        });
        return returnLog.get();
    }

    /**
     * Fügt ein Log Eintrag hinzu
     * @param newLog Der neue Log Eintrag
     */
    public void addLog(Log newLog){
        this.log.add(newLog);
    }

    /**
     * Gibt alle log Einträge zurück
     * @return Alle log Einträge in einer Arraylist
     */
    public ArrayList<Log> getLogs(){
        return this.log;
    }

    /**
     * Löscht einen Log eintrag anhand der ID
     * @param id Id die zum löschen ist
     */
    public void delLog(String id){
        this.log.removeIf(s -> s.getId().equals(id));
    }

    public String getDauer() {
        return dauer;
    }

    public void setDauer(String dauer) {
        this.dauer = dauer;
    }

    public String getMapJson() {
        return mapJson;
    }

    public double getStrecke() {
        return strecke;
    }

    public void setStrecke(double strecke) {
        this.strecke = strecke;
    }

    public String getName() {
        return name;
    }

    public String getStart() {
        return start;
    }

    public String getZiel() {
        return ziel;
    }

}
