# ============================================================================
# Makefile para o projeto GreenTrack - E-Fólio B
# Autor: Edgar Pinto Matuminy
# Data: maio 2026
#
# Comandos disponíveis:
#   make          - compila o programa principal
#   make test     - compila e executa todos os testes
#   make clean    - remove ficheiros temporários
#   make run      - compila e executa o programa principal
# ============================================================================

CC = gcc
CFLAGS = -Wall -Wextra -Wpedantic -std=c11 -I./include
SRCDIR = src
TESTDIR = tests
TARGET = greentrack.exe

# Ficheiros fonte principais
OBJS = $(SRCDIR)/main.o \
       $(SRCDIR)/gestor_plantas.o \
       $(SRCDIR)/gestor_regas.o \
       $(SRCDIR)/gestor_tarefas.o \
       $(SRCDIR)/gestor_dados.o \
       $(SRCDIR)/utils.o

# Ficheiros para testes (sem o main.o)
TEST_OBJS = $(SRCDIR)/gestor_plantas.o \
            $(SRCDIR)/gestor_regas.o \
            $(SRCDIR)/gestor_tarefas.o \
            $(SRCDIR)/gestor_dados.o \
            $(SRCDIR)/utils.o

# ==================== REGRAS PRINCIPAIS ====================

all: $(TARGET)

$(TARGET): $(OBJS)
	$(CC) $(OBJS) -o $(TARGET)
	@echo "Compilação concluída! Executável: $(TARGET)"

$(SRCDIR)/%.o: $(SRCDIR)/%.c
	$(CC) $(CFLAGS) -c $< -o $@

# ==================== TESTES ====================

# Testes de unidade - Gestor Plantas
test_gestor_plantas: $(TESTDIR)/test_gestor_plantas.c $(TEST_OBJS)
	$(CC) $(CFLAGS) $(TESTDIR)/test_gestor_plantas.c $(TEST_OBJS) -o $(TESTDIR)/test_gestor_plantas
	./$(TESTDIR)/test_gestor_plantas

# Testes de unidade - Gestor Regas
test_gestor_regas: $(TESTDIR)/test_gestor_regas.c $(TEST_OBJS)
	$(CC) $(CFLAGS) $(TESTDIR)/test_gestor_regas.c $(TEST_OBJS) -o $(TESTDIR)/test_gestor_regas
	./$(TESTDIR)/test_gestor_regas

# Testes de unidade - Gestor Tarefas
test_gestor_tarefas: $(TESTDIR)/test_gestor_tarefas.c $(TEST_OBJS)
	$(CC) $(CFLAGS) $(TESTDIR)/test_gestor_tarefas.c $(TEST_OBJS) -o $(TESTDIR)/test_gestor_tarefas
	./$(TESTDIR)/test_gestor_tarefas

# Testes de integração
test_integracao: $(TESTDIR)/test_integracao.c $(TEST_OBJS)
	$(CC) $(CFLAGS) $(TESTDIR)/test_integracao.c $(TEST_OBJS) -o $(TESTDIR)/test_integracao
	./$(TESTDIR)/test_integracao

# Executa todos os testes
test: test_gestor_plantas test_gestor_regas test_gestor_tarefas test_integracao
	@echo "========================================="
	@echo "Todos os testes foram executados com sucesso!"
	@echo "========================================="

# ==================== EXECUÇÃO ====================

run: $(TARGET)
	./$(TARGET)

# ==================== LIMPEZA ====================

clean:
	rm -f $(SRCDIR)/*.o $(TARGET)
	rm -f $(TESTDIR)/test_gestor_plantas $(TESTDIR)/test_gestor_regas
	rm -f $(TESTDIR)/test_gestor_tarefas $(TESTDIR)/test_integracao
	@echo "Ficheiros temporários removidos."

.PHONY: all clean run test
