#!make
DEPENDENCIES=""
BRANCH_NAME=$(shell git rev-parse --abbrev-ref HEAD)
PWD=$(shell pwd)
include .env
export $(shell sed 's/=.*//' .env)

# Start container and build Drupal 8 locally
build-local-8:
	docker run --rm --name drupalci_${PROJECT_NAME} \
	    -v ${PWD}/:/var/www/html/web/modules/contrib/${PROJECT_NAME} \
	    -v ~/artifacts:/artifacts \
	    -p ${PROJECT_PORT}:80 \
	    -d marcelovani/drupalci:8-apache-interactive
	make build-local

# Start container and build Drupal 9 locally
build-local-9:
	docker run --rm --name drupalci_${PROJECT_NAME} \
	    -v ${PWD}/:/var/www/html/web/modules/contrib/${PROJECT_NAME} \
	    -v ~/artifacts:/artifacts \
	    -p ${PROJECT_PORT}:80 \
	    -d marcelovani/drupalci:9-apache-interactive
	make build-local

# Start container and build Drupal 10 locally
build-local-10:
	docker run --rm --name drupalci_${PROJECT_NAME} \
	    -v ${PWD}/:/var/www/html/web/modules/contrib/${PROJECT_NAME} \
	    -v ${PWD}/../artifacts:/artifacts \
	    -p ${PROJECT_PORT}:80 \
	    -d marcelovani/drupalci:10-apache-interactive
	make build-local

# Start container and build Drupal 11 locally
build-local-11:
	docker run --rm --name drupalci_${PROJECT_NAME} \
	    -v ${PWD}/:/var/www/html/web/modules/contrib/${PROJECT_NAME} \
	    -v ${PWD}/../artifacts:/artifacts \
	    -p ${PROJECT_PORT}:80 \
	    -d marcelovani/drupalci:11-apache-interactive
	make build-local-dr

# Start container and build Drupal 12 locally
build-local-12:
	docker run --rm --name drupalci_${PROJECT_NAME} \
	    -v ${PWD}/:/var/www/html/web/modules/contrib/${PROJECT_NAME} \
	    -v ${PWD}/../artifacts:/artifacts \
	    -p ${PROJECT_PORT}:80 \
	    -d marcelovani/drupalci:12-apache-interactive
	make build-local-dr

# Install Drupal using vendor/bin/dr (for D11+)
build-local-dr:
	docker exec -i drupalci_${PROJECT_NAME} bash -c "composer require ${DEPENDENCIES}"
	docker exec -i drupalci_${PROJECT_NAME} bash -c "cd /var/www/html && sudo -u www-data /var/www/html/vendor/bin/dr install standard"

build-local:
	docker exec -i drupalci_${PROJECT_NAME} bash -c "composer require ${DEPENDENCIES}"
	docker exec -i drupalci_${PROJECT_NAME} bash -c "sudo -u www-data php web/core/scripts/drupal install standard"

# Test local build
test-local:
	docker exec -i drupalci_${PROJECT_NAME} bash -c '\
	    sudo -u www-data php web/core/scripts/run-tests.sh \
	    --php /usr/local/bin/php \
	    --verbose \
	    --keep-results \
	    --color \
	    --concurrency "32" \
	    --repeat "1" \
	    --types "Simpletest,PHPUnit-Unit,PHPUnit-Kernel,PHPUnit-Functional" \
	    --sqlite sites/default/files/.ht.sqlite \
	    --url http://localhost \
	    --directory "modules/contrib/${PROJECT_NAME}"'

test-local-class:
	docker exec -i drupalci_${PROJECT_NAME} bash -c '\
	    sudo -u www-data php web/core/scripts/run-tests.sh \
	    --php /usr/local/bin/php \
	    --verbose \
	    --keep-results \
	    --color \
	    --concurrency "32" \
	    --repeat "1" \
	    --types "Simpletest,PHPUnit-Unit,PHPUnit-Kernel,PHPUnit-Functional" \
	    --sqlite sites/default/files/.ht.sqlite \
	    --url http://localhost \
	    --class "Drupal\Tests\sharerich\Functional\SharerichTest"'

# Test local build using D12 type names (lowercase, no PHPUnit- prefix)
test-local-12:
	docker exec -i drupalci_${PROJECT_NAME} bash -c '\
	    sudo -u www-data php web/core/scripts/run-tests.sh \
	    --php /usr/local/bin/php \
	    --verbose \
	    --keep-results \
	    --color \
	    --concurrency "32" \
	    --repeat "1" \
	    --types "unit,kernel,functional" \
	    --sqlite sites/default/files/.ht.sqlite \
	    --url http://localhost \
	    --directory "modules/contrib/${PROJECT_NAME}"'

# FunctionalJavascript tests need a webdriver. This starts one sharing the
# Drupal container's network, so the site is reachable at localhost from the
# browser and the driver is reachable at localhost:9515 from Drupal.
WEBDRIVER_ARGS := ["chrome",{"browserName":"chrome","goog:chromeOptions":{"w3c":true,"args":["--no-sandbox","--headless","--disable-gpu","--disable-dev-shm-usage"]}},"http://localhost:9515"]

chromedriver-start:
	docker rm -f ${PROJECT_NAME}_chromedriver 2>/dev/null || true
	docker run -d --name ${PROJECT_NAME}_chromedriver \
	    --network container:drupalci_${PROJECT_NAME} \
	    drupalci/webdriver-chromedriver:production
	sleep 5
	docker exec -i drupalci_${PROJECT_NAME} curl -sf http://localhost:9515/status > /dev/null \
	    && echo "chromedriver ready" || (echo "chromedriver not reachable" && exit 1)

chromedriver-stop:
	docker rm -f ${PROJECT_NAME}_chromedriver 2>/dev/null || true

# Run the FunctionalJavascript tests. Needs `make chromedriver-start` first.
test-local-js:
	docker exec -i -e MINK_DRIVER_ARGS_WEBDRIVER='$(WEBDRIVER_ARGS)' drupalci_${PROJECT_NAME} bash -c '\
	    cd /var/www/html && sudo -u www-data MINK_DRIVER_ARGS_WEBDRIVER="$$MINK_DRIVER_ARGS_WEBDRIVER" \
	    php web/core/scripts/run-tests.sh \
	    --php /usr/local/bin/php --verbose --keep-results --color \
	    --concurrency "1" --repeat "1" \
	    --types "PHPUnit-FunctionalJavascript" \
	    --sqlite sites/default/files/.ht.sqlite \
	    --url http://localhost \
	    --directory "modules/contrib/${PROJECT_NAME}"'

# Same, with the Drupal 12 type name.
test-local-js-12:
	docker exec -i -e MINK_DRIVER_ARGS_WEBDRIVER='$(WEBDRIVER_ARGS)' drupalci_${PROJECT_NAME} bash -c '\
	    cd /var/www/html && sudo -u www-data MINK_DRIVER_ARGS_WEBDRIVER="$$MINK_DRIVER_ARGS_WEBDRIVER" \
	    php web/core/scripts/run-tests.sh \
	    --php /usr/local/bin/php --verbose --keep-results --color \
	    --concurrency "1" --repeat "1" \
	    --types "functional-javascript" \
	    --sqlite sites/default/files/.ht.sqlite \
	    --url http://localhost \
	    --directory "modules/contrib/${PROJECT_NAME}"'

copy-test-results:
	docker exec -i drupalci_${PROJECT_NAME} bash -c 'cd /var/www/html/web/sites/simpletest && cp -a browser_output /artifacts/ && rm -rf browser_output'

# Test in non-interactive mode
test-8:
	docker run --name drupalci_${PROJECT_NAME} \
	    -v ~/artifacts:/artifacts \
	    --rm marcelovani/drupalci:8-apache \
	    --project ${PROJECT_NAME} \
	    --version dev-1.x \
	    --dependencies ${DEPENDENCIES}

# Test in non-interactive mode
test-9:
	docker run --name drupalci_${PROJECT_NAME} \
	    -v ~/artifacts:/artifacts \
	    --rm marcelovani/drupalci:9-apache \
	    --project ${PROJECT_NAME} \
	    --version dev-1.x \
	    --dependencies ${DEPENDENCIES}

# Test in non-interactive mode
test-10:
	docker run --name drupalci_${PROJECT_NAME} \
	    -v ~/artifacts:/artifacts \
	    --rm marcelovani/drupalci:10-apache \
	    --project ${PROJECT_NAME} \
	    --version dev-1.x \
	    --dependencies ${DEPENDENCIES}

# Test in non-interactive mode
test-11:
	docker run --name drupalci_${PROJECT_NAME} \
	    -v ~/artifacts:/artifacts \
	    --rm marcelovani/drupalci:11-apache \
	    --project ${PROJECT_NAME} \
	    --version dev-1.x \
	    --dependencies ${DEPENDENCIES}

# Test in non-interactive mode
test-12:
	docker run --name drupalci_${PROJECT_NAME} \
	    -v ~/artifacts:/artifacts \
	    --rm marcelovani/drupalci:12-apache \
	    --project ${PROJECT_NAME} \
	    --version dev-1.x \
	    --dependencies ${DEPENDENCIES}

open:
	open "http://$(PROJECT_BASE_URL):${PROJECT_PORT}"

stop:
	docker stop drupalci_${PROJECT_NAME}

stop-all-containers:
	ids=$$(docker ps -a -q) && if [ "$${ids}" != "" ]; then docker stop $${ids}; fi

in:
	docker exec -it drupalci_${PROJECT_NAME} bash
