# Bucket Proxy Engine — Makefile
#
# Builds the bucket_proxy_engine binary from C sources.
# Vendors: cJSON (bundled), sqlite3 amalgamation (bundled)
# System deps: libcurl, openssl, libmicrohttpd

CC      = gcc
CFLAGS  = -O2 -Wall -Wextra -Wno-unused-parameter -std=c11 \
          -D_GNU_SOURCE -DSQLITE_THREADSAFE=1 -DSQLITE_DQS=0
LDFLAGS = -lcurl -lssl -lcrypto -lmicrohttpd -lpthread -ldl -lm

SRC_DIR = src
BUILD   = build
BIN     = bucket_proxy_engine

# Source files
SRCS = $(SRC_DIR)/main.c \
       $(SRC_DIR)/server.c \
       $(SRC_DIR)/api.c \
       $(SRC_DIR)/crypto.c \
       $(SRC_DIR)/db.c \
       $(SRC_DIR)/cJSON.c \
       $(SRC_DIR)/sqlite3.c

OBJS = $(patsubst $(SRC_DIR)/%.c,$(BUILD)/%.o,$(SRCS))

.PHONY: all clean check-deps

all: check-deps $(BIN)

$(BIN): $(OBJS)
	@echo "  LINK    $@"
	@$(CC) $(OBJS) -o $@ $(LDFLAGS)
	@echo ""
	@echo "  ✓ Built $(BIN) successfully"
	@echo ""

$(BUILD)/%.o: $(SRC_DIR)/%.c | $(BUILD)
	@echo "  CC      $<"
	@$(CC) $(CFLAGS) -c $< -o $@

# sqlite3 gets special treatment (suppress warnings, threadsafe)
$(BUILD)/sqlite3.o: $(SRC_DIR)/sqlite3.c | $(BUILD)
	@echo "  CC      $< (amalgamation)"
	@$(CC) -O2 -w -std=c11 -DSQLITE_THREADSAFE=1 -DSQLITE_DQS=0 \
	       -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 \
	       -c $< -o $@

# cJSON gets special treatment (suppress warnings)
$(BUILD)/cJSON.o: $(SRC_DIR)/cJSON.c | $(BUILD)
	@echo "  CC      $< (vendored)"
	@$(CC) -O2 -w -std=c11 -c $< -o $@

$(BUILD):
	@mkdir -p $(BUILD)

clean:
	rm -rf $(BUILD) $(BIN)

# Check system dependencies
check-deps:
	@echo "  Checking dependencies..."
	@pkg-config --exists libcurl 2>/dev/null   || (echo "  ✗ libcurl not found. Install: sudo apt install libcurl4-openssl-dev"; exit 1)
	@pkg-config --exists openssl 2>/dev/null   || (echo "  ✗ openssl not found. Install: sudo apt install libssl-dev"; exit 1)
	@pkg-config --exists libmicrohttpd 2>/dev/null || (echo "  ✗ libmicrohttpd not found. Install: sudo apt install libmicrohttpd-dev"; exit 1)
	@echo "  ✓ All dependencies found"
