# JCOGS Image Distribution Makefile

.PHONY: dist clean info help restore-dev scope-vendor clean-scope

ADDON_NAME = jcogs_img
SOURCE_DIR = .
USE_SCOPED_VENDOR ?= 0

JSON_VERSION := $(shell grep '"version"' addon.json | sed 's/.*"version": *"\([^"]*\)".*/\1/')
VERSION_SAFE := $(shell echo $(JSON_VERSION) | sed 's/\./_/g' | sed 's/[[:space:]]//g' | tr '[:lower:]' '[:upper:]')
ARCHIVE_NAME = $(ADDON_NAME)_$(VERSION_SAFE)
BUILD_DIR = ./$(ARCHIVE_NAME)

dist: clean info
	@echo "Building distribution for $(ADDON_NAME) version $(JSON_VERSION)..."
	@mkdir -p $(BUILD_DIR)/$(ADDON_NAME)
	@if [ "$(USE_SCOPED_VENDOR)" = "1" ]; then \
		echo "Preparing scoped vendor build..."; \
		$(MAKE) scope-vendor; \
	fi
	@cp composer.lock composer.lock.dev-backup 2>/dev/null || echo "No composer.lock to backup"
	@cp -r vendor vendor.dev-backup 2>/dev/null || echo "No vendor directory to backup"
	@rsync -av --exclude='.git/' \
	           --exclude='.gitignore' \
	           --exclude='vendor-build/' \
	           --exclude='vendor-bin/' \
	           --exclude='vendor.dev-backup/' \
	           --exclude='composer.lock.dev-backup' \
	           --exclude='$(ADDON_NAME)_*/' \
	           --exclude='Makefile' \
	           --exclude='*.zip' \
	           --exclude='*.tar.gz' \
	           $(SOURCE_DIR)/ $(BUILD_DIR)/$(ADDON_NAME)/
	@if [ "$(USE_SCOPED_VENDOR)" = "1" ]; then \
		echo "Injecting scoped vendor into distribution..."; \
		rm -rf "$(BUILD_DIR)/$(ADDON_NAME)/vendor"; \
		cp -R vendor-build "$(BUILD_DIR)/$(ADDON_NAME)/vendor"; \
	else \
		echo "Regenerating composer autoload files for production..."; \
		cd $(BUILD_DIR)/$(ADDON_NAME) && composer install --no-dev --optimize-autoloader --no-interaction; \
	fi
	@cd $(BUILD_DIR)/.. && zip -r $(ARCHIVE_NAME).zip $(ARCHIVE_NAME)/
	@echo ""
	@echo "✅ Distribution built successfully"
	@echo "   📦 $(ARCHIVE_NAME).zip"
	@echo ""
	@$(MAKE) restore-dev

restore-dev:
	@echo "Restoring development environment..."
	@if [ -f "composer.lock.dev-backup" ]; then \
		cp composer.lock.dev-backup composer.lock; \
		rm composer.lock.dev-backup; \
		echo "✓ Restored composer.lock"; \
	fi
	@if [ -d "vendor.dev-backup" ]; then \
		rm -rf vendor; \
		mv vendor.dev-backup vendor; \
		echo "✓ Restored vendor directory"; \
	fi
	@if [ -d "vendor-build" ]; then \
		rm -rf vendor-build; \
		echo "✓ Cleaned scoped vendor build directory"; \
	fi
	@echo "✅ Development environment restored"

scope-vendor:
	@echo "Ensuring php-scoper tooling is available..."
	@composer install --no-interaction
	@composer bin php-scoper install --no-interaction
	@echo "Building scoped vendor tree..."
	@composer prefix-dependencies
	@echo "✓ Scoped vendor tree written to vendor-build/"

clean-scope:
	@rm -rf vendor-build
	@echo "✓ Removed vendor-build"

clean:
	@echo "Cleaning previous builds..."
	@rm -rf ./$(ADDON_NAME)_*
	@rm -f *.zip *.tar.gz
	@rm -f composer.lock.dev-backup
	@rm -rf vendor.dev-backup
	@rm -rf vendor-build
	@echo "✓ Clean completed"

info:
	@echo "Distribution Configuration:"
	@echo "  Add-on: $(ADDON_NAME)"
	@echo "  Version: $(JSON_VERSION)"
	@echo "  Archive name: $(ARCHIVE_NAME)"
	@echo "  Scoped vendor mode: $(USE_SCOPED_VENDOR)"

help:
	@echo "Usage:"
	@echo "  make dist"
	@echo "  make dist USE_SCOPED_VENDOR=1"
	@echo "  make scope-vendor"
	@echo "  make clean"
	@echo "  make info"

.DEFAULT_GOAL := help
