.PHONY: lint_and_test build_release check_version up down restart build shell test check_cs fix_cs clean help setup_test_db install_wp_tests quick_test test_with_coverage
# Default target
.DEFAULT_GOAL := help
PLUGIN_PATH=/var/www/html/wp-content/plugins/shown-connector
# Docker Compose Commands
up: ## Start Docker containers
	docker-compose up -d

down: ## Stop Docker containers
	docker-compose down

restart: down up ## Restart Docker containers

build: ## Rebuild Docker containers
	docker-compose build
	docker-compose up -d

shell: ## Access WordPress container shell
	docker-compose exec wordpress bash

# Development Commands
install: ## Install Composer dependencies
	docker-compose exec wordpress bash -c "cd $(PLUGIN_PATH) && composer install --no-dev"

update: ## Update Composer dependencies
	docker-compose exec wordpress bash -c "cd $(PLUGIN_PATH) && composer update"

setup_test_db: ## Create test database
	docker-compose exec db mysql -uroot -pwordpress -e "DROP DATABASE IF EXISTS wordpress_test; CREATE DATABASE wordpress_test; GRANT ALL PRIVILEGES ON wordpress_test.* TO 'wordpress'@'%';"

reset_test_data: ## Reset only test database data (keep WordPress test suite installed)
	docker-compose exec db mysql -uroot -pwordpress -e "DROP DATABASE IF EXISTS wordpress_test; CREATE DATABASE wordpress_test; GRANT ALL PRIVILEGES ON wordpress_test.* TO 'wordpress'@'%';"

install_dev: ## Install dev dependencies (includes WooCommerce)
	docker-compose exec wordpress bash -c "cd $(PLUGIN_PATH) && composer install --dev"

wpcli_shell: ## Access WP-CLI container shell
	docker-compose exec wpcli bash

activate_plugins: ## Activate WooCommerce and our plugin
	docker-compose exec wpcli wp plugin activate woocommerce shown-connector

generate_test_products: ## Generate test products using WC Smooth Generator
	docker-compose exec wpcli wp wc generate products 10 --type=simple

generate_test_data: ## Generate complete test data set (products, orders, customers)
	docker-compose exec wpcli wp wc generate products 20 --type=simple
	docker-compose exec wpcli wp wc generate orders 30
	docker-compose exec wpcli wp wc generate customers 15

install_wp_tests: ## Install WordPress test suite (one-time setup)
	docker-compose exec wordpress bash -c "cd $(PLUGIN_PATH) && rm -rf /tmp/wordpress-tests-lib /tmp/wordpress && bash bin/install-wp-tests.sh wordpress_test wordpress wordpress db latest true && cp wp-tests-config.php /tmp/wordpress-tests-lib/"

test: ## Run PHPUnit tests, optionally specify a filter e.g. make test TestProducts
	docker-compose exec wordpress bash -c "cd $(PLUGIN_PATH) && WP_TESTS_DIR=/tmp/wordpress-tests-lib WP_CORE_DIR=/tmp/wordpress vendor/bin/phpunit --filter $(filter-out $@,$(MAKECMDGOALS))"

quick_test: ## Run all tests without full setup (assumes test environment is set up)
	docker-compose exec wordpress bash -c "cd $(PLUGIN_PATH) && WP_TESTS_DIR=/tmp/wordpress-tests-lib WP_CORE_DIR=/tmp/wordpress vendor/bin/phpunit --verbose"

test_with_coverage: ## Run tests with coverage report
	docker-compose exec wordpress bash -c "cd $(PLUGIN_PATH) && WP_TESTS_DIR=/tmp/wordpress-tests-lib WP_CORE_DIR=/tmp/wordpress vendor/bin/phpunit --coverage-text"

# Allow passing arguments to make test
%:
	@:

test_install: install_dev setup_test_db install_wp_tests ## Setup test environment completely
	docker-compose exec wordpress bash -c "cd $(PLUGIN_PATH) && WP_TESTS_DIR=/tmp/wordpress-tests-lib WP_CORE_DIR=/tmp/wordpress vendor/bin/phpunit --version"

test_all: test_install test ## Setup and run all tests

test_check: ## Check if test environment is ready
	docker-compose exec wordpress bash -c "cd $(PLUGIN_PATH) && WP_TESTS_DIR=/tmp/wordpress-tests-lib WP_CORE_DIR=/tmp/wordpress vendor/bin/phpunit --version"

test_debug: ## Run tests with debug output
	docker-compose exec wordpress bash -c "cd $(PLUGIN_PATH) && WP_TESTS_DIR=/tmp/wordpress-tests-lib WP_CORE_DIR=/tmp/wordpress vendor/bin/phpunit --debug --verbose"

test_xdebug: ## Run tests with Xdebug enabled for PhpStorm debugging
	docker-compose exec -e XDEBUG_SESSION=PHPSTORM wordpress bash -c "cd $(PLUGIN_PATH) && WP_TESTS_DIR=/tmp/wordpress-tests-lib WP_CORE_DIR=/tmp/wordpress vendor/bin/phpunit --filter $(filter-out $@,$(MAKECMDGOALS))"

check_cs: ## Check code against WordPress Coding Standards
	docker-compose exec wordpress bash -c "cd $(PLUGIN_PATH) && vendor/bin/phpcs --standard=phpcs.xml"

fix_cs: ## Fix automatically fixable coding standards issues
	docker-compose exec wordpress bash -c "cd $(PLUGIN_PATH) && vendor/bin/phpcbf --standard=phpcs.xml"

# Utility Commands
clean: ## Remove all Docker containers, volumes, and networks
	docker-compose down -v --remove-orphans

logs: ## View Docker logs
	docker-compose logs -f

# Help Command
help: ## Display this help message
	@echo "WordPress Shown Connector Commands:"
	@echo ""
	@echo "Setup Commands:"
	@echo "  up              - Start Docker containers"
	@echo "  test_install    - Setup test environment completely (one-time)"
	@echo "  install_dev     - Install dev dependencies (includes WooCommerce)"
	@echo ""
	@echo "Test Commands:"
	@echo "  test            - Run PHPUnit tests (filter: make test TestProducts)"
	@echo "  quick_test      - Run all tests (assumes test environment is set up)"
	@echo "  test_with_coverage - Run tests with coverage report"
	@echo "  test_check      - Check if test environment is ready"
	@echo "  test_debug      - Run tests with debug output"
	@echo "  test_xdebug     - Run tests with Xdebug for PhpStorm debugging"
	@echo "  reset_test_data - Reset only test database data (keeps WP test suite)"
	@echo ""
	@echo "Development Commands:"
	@echo "  install         - Install Composer dependencies"
	@echo "  activate_plugins - Activate WooCommerce and our plugin"
	@echo "  generate_test_products - Generate 10 test products"
	@echo "  generate_test_data - Generate complete test dataset"
	@echo "  check_cs        - Check code standards"
	@echo "  fix_cs          - Fix code standards"
	@echo "  shell           - Access WordPress container shell"
	@echo "  wpcli_shell     - Access WP-CLI container shell"
	@echo ""
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'

# Define the minimum required PHP version
MIN_REQUIRED_PHP_VERSION := 70400
PHP_PATH ?= php
PLUGIN_VERSION := $(shell cat version.txt)

# Check if PHP version is at least the minimum required version
check_php_version:
	@echo "Checking PHP version..."
	@php_version=`php -r "echo PHP_VERSION_ID;"`; \
	if [ $$php_version -lt $(MIN_REQUIRED_PHP_VERSION) ]; then \
		echo "Error: Minimum required PHP version is $(MIN_REQUIRED_PHP_VERSION) or higher. Current PHP version is $$(php -v | head -n 1 | awk '{print $$2}')"; \
		exit 1; \
	fi
