# Compiler and flags
CC = gcc
CFLAGS = -Wall -Wextra -O3 -march=native -pthread
LDFLAGS = -lm -lrt -lpthread
TARGET = hdgl_bridge

# Source files
SRC_CORE = hdgl_bridge_c.c
SRC_V40 = hdgl_bridge_v40.c
SRC_API = hdgl_http_api.c
SRC_IPFS = hdgl_ipfs_client.c
SRC_NETCAT = hdgl_netcat.c

# Libraries for full build
LIBS_FULL = -lcurl -ljansson

# Build targets
all: $(TARGET)

# Core only (no API, no IPFS)
$(TARGET): $(SRC_CORE)
	$(CC) $(CFLAGS) -o $(TARGET) $(SRC_CORE) $(LDFLAGS)
	@echo "✓ Built $(TARGET) - Core only"
	@echo "  Run with: ./$(TARGET)"

# Full build with API and IPFS
full: $(SRC_CORE) $(SRC_API) $(SRC_IPFS)
	$(CC) $(CFLAGS) -DENABLE_HTTP_API -DENABLE_IPFS -o $(TARGET) \
		$(SRC_CORE) $(SRC_API) $(SRC_IPFS) $(LDFLAGS) $(LIBS_FULL)
	@echo "✓ Built $(TARGET) - Full (API + IPFS)"
	@echo "  Dependencies: libcurl, libjansson"

# API only (no IPFS)
api: $(SRC_CORE) $(SRC_API)
	$(CC) $(CFLAGS) -DENABLE_HTTP_API -o $(TARGET) \
		$(SRC_CORE) $(SRC_API) $(LDFLAGS) -lcurl
	@echo "✓ Built $(TARGET) - With HTTP API"
	@echo "  Dependencies: libcurl"

# Optimized build (full features)
optimized: $(SRC_CORE) $(SRC_API) $(SRC_IPFS)
	$(CC) $(CFLAGS) -DENABLE_HTTP_API -DENABLE_IPFS -flto -funroll-loops -ffast-math \
		-o $(TARGET) $(SRC_CORE) $(SRC_API) $(SRC_IPFS) $(LDFLAGS) $(LIBS_FULL)
	@echo "✓ Built $(TARGET) - Optimized (API + IPFS + LTO)"

# Debug build (full features)
debug: $(SRC_CORE) $(SRC_API) $(SRC_IPFS)
	$(CC) -Wall -Wextra -g -O0 -DENABLE_HTTP_API -DENABLE_IPFS \
		-o $(TARGET) $(SRC_CORE) $(SRC_API) $(SRC_IPFS) $(LDFLAGS) $(LIBS_FULL)
	@echo "✓ Built $(TARGET) - Debug mode"

# Clean
clean:
	rm -f $(TARGET) *.o
	@echo "✓ Cleaned"

# Install (copy to /usr/local/bin)
install: $(TARGET)
	sudo cp $(TARGET) /usr/local/bin/
	@echo "✓ Installed to /usr/local/bin/$(TARGET)"

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

# V4.0 Build (Enhanced with Dₙ(r) and Numeric Lattice)
v40: $(SRC_V40) $(SRC_API) $(SRC_IPFS) $(SRC_NETCAT)
	$(CC) $(CFLAGS) -DENABLE_HTTP_API -DENABLE_IPFS -o hdgl_bridge_v40 \
		$(SRC_V40) $(SRC_API) $(SRC_IPFS) $(SRC_NETCAT) $(LDFLAGS) $(LIBS_FULL)
	@echo "✓ Built hdgl_bridge_v40 - Enhanced Dₙ(r) implementation"
	@echo "  Features: 32,768 Hz, Numeric Lattice, Full Dₙ(r) formula, Analog NetCat"

# V4.0 Optimized
v40-opt: $(SRC_V40) $(SRC_API) $(SRC_IPFS) $(SRC_NETCAT)
	$(CC) $(CFLAGS) -DENABLE_HTTP_API -DENABLE_IPFS -flto -funroll-loops -ffast-math \
		-o hdgl_bridge_v40 $(SRC_V40) $(SRC_API) $(SRC_IPFS) $(SRC_NETCAT) $(LDFLAGS) $(LIBS_FULL)
	@echo "✓ Built hdgl_bridge_v40 - Optimized with Analog NetCat"

# Help
help:
	@echo "HDGL Bridge C - Makefile"
	@echo ""
	@echo "Targets:"
	@echo "  make          - Build core only (no API, no IPFS)"
	@echo "  make full     - Build with API + IPFS (recommended)"
	@echo "  make api      - Build with HTTP API only"
	@echo "  make v40      - Build V4.0 with Dₙ(r) + Numeric Lattice"
	@echo "  make v40-opt  - Build V4.0 optimized"
	@echo "  make optimized- Build optimized with all features"
	@echo "  make debug    - Build debug version with all features"
	@echo "  make clean    - Remove built files"
	@echo "  make install  - Install to /usr/local/bin"
	@echo "  make run      - Build and run"
	@echo ""
	@echo "Requirements:"
	@echo "  - GCC or Clang"
	@echo "  - pthread library"
	@echo "  - libm (math)"
	@echo "  - librt (realtime)"
	@echo "  - libcurl (for HTTP API)"
	@echo "  - libjansson (for IPFS JSON parsing)"
	@echo ""
	@echo "Install dependencies (Ubuntu/Debian):"
	@echo "  sudo apt-get install build-essential libcurl4-openssl-dev libjansson-dev"

.PHONY: all full api v40 v40-opt optimized debug clean install run help
