# ================================================================
#  Makefile — GreenTrack: Gestão de Jardins Comunitários
#  Compilação modular com pastas include/ e src/
# ================================================================

CC       = gcc
CFLAGS   = -Wall -Wextra -std=c99 -I./include
SRCDIR   = src
OBJDIR   = obj
TARGET   = greentrack

# Ficheiros objeto da aplicação principal
OBJS = $(OBJDIR)/plantas.o \
       $(OBJDIR)/regas.o \
       $(OBJDIR)/tarefas.o \
       $(OBJDIR)/io.o \
       $(OBJDIR)/main.o

# Objetos dos testes de unidade (sem main.o)
TEST_OBJS = $(OBJDIR)/plantas.o \
            $(OBJDIR)/regas.o \
            $(OBJDIR)/tarefas.o \
            $(OBJDIR)/io.o \
            $(OBJDIR)/testes_unidade.o
TEST_TARGET = testes_unidade

# Objetos dos testes de integração (sem main.o)
INTEG_OBJS = $(OBJDIR)/plantas.o \
             $(OBJDIR)/regas.o \
             $(OBJDIR)/tarefas.o \
             $(OBJDIR)/io.o \
             $(OBJDIR)/testes_integracao.o
INTEG_TARGET = testes_integracao

# Regra principal
all: $(OBJDIR) $(TARGET)

# Regra dos testes de unidade
testes: $(OBJDIR) $(TEST_TARGET)

# Regra dos testes de integração
integracao: $(OBJDIR) $(INTEG_TARGET)

# Criar pasta obj/
$(OBJDIR):
	mkdir -p $(OBJDIR)

# Link da aplicação principal
$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^

# Link dos testes de unidade
$(TEST_TARGET): $(TEST_OBJS)
	$(CC) $(CFLAGS) -o $@ $^

# Link dos testes de integração
$(INTEG_TARGET): $(INTEG_OBJS)
	$(CC) $(CFLAGS) -o $@ $^

# Compilar ficheiros .c -> .o
$(OBJDIR)/%.o: $(SRCDIR)/%.c
	$(CC) $(CFLAGS) -c $< -o $@

# Compilar testes/testes_unidade.c -> obj/testes_unidade.o
$(OBJDIR)/testes_unidade.o: testes/testes_unidade.c
	$(CC) $(CFLAGS) -c $< -o $@

# Compilar testes/testes_integracao.c -> obj/testes_integracao.o
$(OBJDIR)/testes_integracao.o: testes/testes_integracao.c
	$(CC) $(CFLAGS) -c $< -o $@

# Cross-compilador para Windows (MinGW-w64)
MINGW_CC = x86_64-w64-mingw32-gcc

# Regra de cross-compilação para Windows
# Compila diretamente os ficheiros .c em greentrack.exe,
# sem ficheiros objeto intermediários, evitando conflitos
# com a compilação nativa Linux.
mingw: clean
	$(MINGW_CC) $(CFLAGS) -o $(TARGET).exe \
		$(SRCDIR)/plantas.c $(SRCDIR)/regas.c \
		$(SRCDIR)/tarefas.c $(SRCDIR)/io.c $(SRCDIR)/main.c

# Limpar
clean:
	rm -rf $(OBJDIR) $(TARGET) greentrack.exe $(TEST_TARGET) $(INTEG_TARGET)

.PHONY: all clean testes integracao mingw
