# === Environnements ===
JUNIT_JAR = /usr/share/java/junit.jar
HAMCREST_JAR = /usr/share/java/hamcrest-core.jar
TEST_ENV = "bin:$(JUNIT_JAR):$(HAMCREST_JAR)"

# === Répertoires ===
SRC_DIR = fr
BIN_DIR = bin

# === Répertoires des ressources ===
RES_SRC = fr/iut_fbleau/Res
RES_BIN = bin/fr/iut_fbleau/Res

# === Recherche automatique des fichiers .java ===
# SOURCES : uniquement le code de l'application (sans les fichiers de tests)
SOURCES := $(shell find $(SRC_DIR) -name "*.java" -not -path "$(SRC_DIR)/iut_fbleau/Tests/*")
# TEST_SOURCES : uniquement les fichiers de tests
TEST_SOURCES := $(shell find $(SRC_DIR)/iut_fbleau/Tests -name "*.java" 2>/dev/null)

# === Classe principale ===
MAIN_CLASS = fr.iut_fbleau.Avalam.Main

# === Classe de test ===
TEST_CLASS = fr.iut_fbleau.Tests.AvalamBoardTest

# === Commandes Java ===
JC = javac
# Compilation normale (application uniquement)
JCFLAGS = -d $(BIN_DIR)
# Compilation des tests (application + JUnit)
JCFLAGS_TESTS = -d $(BIN_DIR) -cp $(TEST_ENV)

JAVA = java
JAVAFLAGS = -cp $(BIN_DIR)
JAVAFLAGS_TESTS = -cp $(TEST_ENV)

# === Règle par défaut ===
all: build

# === Compilation ===
build: compile resources
	@echo "✔ Compilation terminée."

compile:
	@echo "===> Compilation du projet Avalam..."
	@mkdir -p $(BIN_DIR)
	@$(JC) $(JCFLAGS) $(SOURCES)

compile_tests: compile
	@echo "===> Compilation des tests..."
	@mkdir -p $(BIN_DIR)
ifneq ($(TEST_SOURCES),)
	@$(JC) $(JCFLAGS_TESTS) $(TEST_SOURCES)
else
	@echo "Aucun fichier de test trouvé dans $(SRC_DIR)/iut_fbleau/Tests"
endif

# === Vérification / installation des dépendances de tests ===
check_test_deps:
	@echo "===> Vérification des dépendances de tests (JUnit / Hamcrest)..."
	@if [ ! -f "$(JUNIT_JAR)" ] || [ ! -f "$(HAMCREST_JAR)" ]; then \
		echo "    JUnit ou Hamcrest manquant, tentative d'installation (sudo requis)..."; \
		if command -v sudo >/dev/null 2>&1; then \
			sudo apt-get update && sudo apt-get install -y junit4 libhamcrest-java; \
		else \
			apt-get update && apt-get install -y junit4 libhamcrest-java; \
		fi; \
		if [ ! -f "$(JUNIT_JAR)" ] || [ ! -f "$(HAMCREST_JAR)" ]; then \
			echo "✖ Impossible de trouver/installer $(JUNIT_JAR) ou $(HAMCREST_JAR). Vérifiez manuellement vos paquets JUnit/Hamcrest."; \
			exit 1; \
		else \
			echo "✔ Dépendances de tests installées."; \
		fi; \
	else \
		echo "✔ JUnit et Hamcrest trouvés."; \
	fi

# === Copie des ressources (.txt) dans bin ===
resources:
	@echo "===> Copie des ressources..."
	@mkdir -p $(RES_BIN)
	@cp $(RES_SRC)/* $(RES_BIN)/
	@echo "✔ Ressources copiées."

# === Exécution ===
run:
	@echo "===> Lancement du jeu Avalam..."
	@$(JAVA) $(JAVAFLAGS) $(MAIN_CLASS)

# === Tests ===
test: check_test_deps compile_tests
	@echo "===> Lancement des tests..."
	@$(JAVA) $(JAVAFLAGS_TESTS) org.junit.runner.JUnitCore $(TEST_CLASS)
	@echo "... Fin des tests."

# === Nettoyage ===
clean:
	@echo "===> Suppression des fichiers compilés..."
	@rm -rf $(BIN_DIR)
	@echo "✔ Nettoyage complet."

# === Recompile + run ===
re: clean build run

# === Génération de la Javadoc ===
DOC_DIR = doc
javadoc:
	@echo "===> Génération de la Javadoc..."
	@mkdir -p $(DOC_DIR)
	@javadoc -d $(DOC_DIR) -sourcepath $(SRC_DIR) -subpackages fr.iut_fbleau.Avalam
	@echo "✔ Javadoc générée dans $(DOC_DIR)/"
