# ΞSUS Website Build System
# Environment variables:
# ESUS_PUBLISH_HOST - target host for deployment

PANDOC = pandoc
SRC_DIR = src
STATIC_DIR = static
STAGING_DIR = staging
TEMPLATE = pandoc-template.html

MD_FILES := $(wildcard $(SRC_DIR)/*.md)
HTML_FILES := $(patsubst $(SRC_DIR)/%.md,$(STAGING_DIR)/%.html,$(MD_FILES))

# Default target
all: build

# Build HTML from markdown
build: $(HTML_FILES) copy-static

# Create staging directory
$(STAGING_DIR):
	mkdir -p $(STAGING_DIR)

# Convert markdown to HTML
$(STAGING_DIR)/%.html: $(SRC_DIR)/%.md $(TEMPLATE) | $(STAGING_DIR)
	$(PANDOC) \
		--from markdown \
		--to html5 \
		--template=$(TEMPLATE) \
		--standalone \
		--css=css/style.css \
		--toc \
		--output=$@ \
		$<

# Copy static files
copy-static: | $(STAGING_DIR)
	rsync -avz --exclude='.*' --delete $(STATIC_DIR)/* $(STAGING_DIR)/

# Clean staging directory
clean:
	rm -rf $(STAGING_DIR)

# Upload to server (requires ESUS_PUBLISH_HOST environment variable)
upload: build
	@if [ -z "$(ESUS_PUBLISH_HOST)" ]; then \
		echo "Error: ESUS_PUBLISH_HOST environment variable not set"; \
		exit 1; \
	fi
	rsync -avz --exclude='.*' --delete $(STAGING_DIR)/ $(ESUS_PUBLISH_HOST):/var/www/html/

# Development server (requires Python)
serve: build
	@echo "Starting development server at http://localhost:8000"
	cd $(STAGING_DIR) && python3 -m http.server 8000

# Watch for changes (requires inotify-tools)
watch:
	@echo "Watching for changes..."
	while inotifywait -e modify -r $(SRC_DIR) $(STATIC_DIR) $(TEMPLATE) 2>/dev/null; do \
		make build; \
		echo "Site rebuilt"; \
	done

.PHONY: all build copy-static clean upload serve watch
