# 1. Betriebssystem-Erkennung (OS Detection)
ifeq ($(OS),Windows_NT)
    # Windows-Einstellungen
    RM = del /Q /F
    RMDIR = rmdir /S /Q
    # Pfadkorrektur für Windows-Kompatibilität bei Dateilisten
    FIX_PATH = $(subst /,\,$(1))
    # Wildcard-Suche für Windows (benötigt manchmal explizite Pfade)
    JAVA_FILES = $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.java))
else
    # Mac / Linux Einstellungen
    RM = rm -f
    RMDIR = rm -rf
    FIX_PATH = $(1)
    JAVA_FILES = $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.java))
endif

# Variablen für die Verzeichnisse und Dateien
SRC_DIRS = . adt oop graph

# Einstellungen für Javadoc
DOC_DIR = docs
DOC_TITLE = "Programmieren lernen mit Java"
MATHJAX_SCRIPT = "<script type='text/javascript' id='MathJax-script' async src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js'></script>"

# Standard-Target (wird ausgeführt, wenn man nur 'make' aufruft)
all: compile docs

# 1. Kompilieren der Java-Dateien
compile:
	javac $(JAVA_FILES)

# 2. Generieren der Javadoc-Dokumentation
docs:
	javadoc -Xdoclint:all,-missing \
		-windowtitle $(DOC_TITLE) \
		--allow-script-in-comments \
		-header $(MATHJAX_SCRIPT) \
		-d $(DOC_DIR) \
		-author \
		-protected \
		$(JAVA_FILES)

# Bereinigen der kompilierten .class-Dateien und der Dokumentation
clean:
ifeq ($(OS),Windows_NT)
	@foreach %%d in ($(SRC_DIRS)) do if exist %%d\*.class del /Q /F %%d\*.class
	@if exist $(DOC_DIR) rmdir /S /Q $(DOC_DIR)
	@if not exist $(DOC_DIR) mkdir $(DOC_DIR)
else
	rm -f $(foreach dir,$(SRC_DIRS),$(dir)/*.class)
	rm -rf $(DOC_DIR)/*
endif

.PHONY: all compile docs clean
