include .env

clone:
	git clone ${MY_APP_GIT_URL} app

rm-promo-image-assets:
	docker compose exec php-fpm rm -rf application/database/assets/images

clone-promo-image:
	git clone http://gitea.office.local:3000/alex_chevski/eatvio_images_assets app/database/assets/images

reinit-promo-images: rm-promo-image-assets clone-promo-image

start:
	docker compose up -d

stop:
	docker compose down

restart: stop start

status:
	docker compose ps

rm-promo-image-assets:
    rm -rf app/database/assets/images

clone-promo-image:
    git clone http://gitea.office.local:3000/alex_chevski/eatvio_images_assets app/database/assets/images

reinit-promo-images: rm-promo-image-assets clone-promo-image

bash:
	docker compose exec php-fpm bash

worker-restart:
	docker compose exec worker supervisorctl restart laravel-worker:*

clear-images:
	docker compose exec php-fpm ./artisan clear:orphaned-images

links-images:
	jdupes -r -1 -l app/storage/app

tinker:
	docker compose exec php-fpm ./artisan tinker

reseed-db:
	docker compose exec php-fpm bash -c "./artisan migrate:refresh; ./artisan db:seed"

setup-laravel-key:
	docker compose exec php-fpm php /application/artisan key:generate

setup-laravel-packages:
	docker compose exec php-fpm composer install

copy-laravel-env:
	docker compose exec php-fpm cp /application/.env.example /application/.env

copy-infra-env:
	cp .env.infra-example .env

run-migrations:
	docker compose exec php-fpm ./artisan migrate

run-plan-seed:
	docker compose exec php-fpm ./artisan db:seed --class=PlanSeeder

run-user-seed:
	docker compose exec php-fpm ./artisan db:seed --class=UserSeeder

seed-db:
	docker compose exec php-fpm ./artisan db:seed

fix-permissions:
	docker compose exec php-fpm chown -R www-data:www-data storage

fix-code-style:
	docker compose exec -T php-fpm bash -c "vendor/bin/pint --parallel; composer run fix-blade-fomatting"

fix-blade-formatting:
	docker compose exec -T php-fpm composer run test-blade-formatting

artisan:
	docker compose exec php-fpm ./artisan $(ARGS)

mysql-console:
	docker compose exec mysql mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE}

mysql-dump-local:
	docker compose exec mysql mysqldump --single-transaction --skip-opt -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE}

mysql-restore:
	docker compose exec mysql bash -c "mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} < /application/eatvio-restore.sql"

mysql-save-prod-db:
	mysqldump --single-transaction -u${PROD_DB_USER} -p${PROD_DB_PASS} -h${PROD_DB_HOST} -P${PROD_DB_PORT} eatvio > ${PROD_DB_FILE}

mysql-restore-saved-from-prod-db:
	docker compose exec mysql bash -c "cat ./${PROD_DB_FILE} | mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE}"

mysql-remove-latest-prod-db:
	rm -f ${PROD_DB_FILE}

mysql-import-db-from-prod: mysql-save-prod-db mysql-restore-saved-from-prod-db mysql-remove-latest-prod-db

start-frontend:
	docker compose exec frontend npm run watch

build-frontend-prod:
	docker compose exec php-fpm bash -c "npm install -g npm@latest; npm run production"

make-storage-link:
	docker compose exec php-fpm ./artisan storage:link

node-frontend-deps:
	docker compose exec php-fpm npm i --legacy-peer-deps

paratest-bin:
	docker compose exec -u www-data php-fpm vendor/bin/paratest

paratest-artisan:
	docker compose exec -u www-data -T php-fpm ./artisan test --parallel --stop-on-failure --env=testing

fix-insights:
	docker compose exec php-fpm vendor/bin/phpinsights --fix --config-path=./config/insights.php --no-interaction --min-quality=80 --min-complexity=90 --min-architecture=75 --min-style=95

insights:
	docker compose exec -T php-fpm vendor/bin/phpinsights --config-path=./config/insights.php --no-interaction --min-quality=80 --min-complexity=90 --min-architecture=75 --min-style=95 --flush-cache

rector:
	docker compose exec -T php-fpm vendor/bin/rector process --dry-run

static-analysis:
	docker compose exec -T php-fpm composer static-analysis

detect-magic-numbers:
	docker compose exec -u www-data -T php-fpm vendor/bin/phpmnd app/ tests/

fix-web-permissions:
	docker compose exec -T php-fpm chown -R www-data:www-data bootstrap/cache storage

clear-app-cache:
	docker compose exec php-fpm ./artisan optimize:clear

build-front:
	docker compose exec php-fpm bash -c "npm install -g npm@latest;npm run production"

reindex-search:
	docker compose exec php-fpm ./artisan search:init

composer-do:
	docker compose exec php-fpm composer dump-auto

run-once-oprations:
	docker compose exec php-fpm bash -c "./artisan operations:process"

reload-wokers:
        docker-compose exec worker ./artisan queue:restart

after-deploy-light: composer-do run-migrations run-once-oprations clear-app-cache build-front fix-permissions reload-wokers

after-deploy: composer-do clear-app-cache run-migrations run-once-oprations build-front fix-permissions reload-wokers reindex-search

# ci: fix-web-permissions fix-code-style detect-magic-numbers test rector insights static-analysis fix-web-permissions
ci: fix-web-permissions detect-magic-numbers test rector insights static-analysis fix-web-permissions

local-composer-ci:
	docker compose exec php-fpm composer ci

test: fix-web-permissions paratest-artisan

test-file-by-path:
	docker compose exec php-fpm ./artisan test --env=testing $(ARGS)

local-ci: fix-web-permissions local-composer-ci fix-web-permissions

init: clone copy-infra-env restart setup-laravel-packages copy-laravel-env setup-laravel-key run-migrations node-frontend-deps build-frontend-prod fix-permissions make-storage-link

rebuild-services:
	docker compose build --no-cache

pull-services:
	docker compose pull

force-rebuild-services: stop rebuild-services pull-services start

