.PHONY: init-dev

DCDEV=./find.sh

DMCLI=./find.sh inspectlife_mongo "mongo -u root -p secret"
# DMIMPORT=./find.sh inspectlife_mongo "mongoimport --uri 'mongodb://root:secret@mongo:27017/?authSource=admin'"

SERVICES=auth base file cal order telerehab-server notification-server edg-config-server

help:
	@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)

pull-images:
	docker pull registry.geekcoders.cz/gc/x/mirror-redis:6.0-buster
	docker pull registry.geekcoders.cz/gc/x/mirror-mongo:5
	docker pull registry.geekcoders.cz/gc/x/mirror-mongo-express:0.54
	docker pull registry.geekcoders.cz/inspectlife/monorepo/runtime-php8:latest
	docker pull registry.geekcoders.cz/inspectlife/monorepo/auth-server:master
	docker pull registry.geekcoders.cz/inspectlife/monorepo/base-server:master
	docker pull registry.geekcoders.cz/inspectlife/monorepo/cal-server:master
	docker pull registry.geekcoders.cz/inspectlife/monorepo/edgy-config-server:master
	docker pull registry.geekcoders.cz/inspectlife/monorepo/edgy-workers:master
	docker pull registry.geekcoders.cz/inspectlife/monorepo/file-proxy:master
	docker pull registry.geekcoders.cz/inspectlife/monorepo/rabbitmq:latest
	docker pull registry.geekcoders.cz/inspectlife/monorepo/notification-server:master
	docker pull registry.geekcoders.cz/inspectlife/monorepo/ordering-server:master
	docker pull registry.geekcoders.cz/inspectlife/monorepo/telerehab-processor:master
	docker pull registry.geekcoders.cz/inspectlife/monorepo/telerehab-server:master
	docker pull registry.geekcoders.cz/inspectlife/monorepo/portal-ui:master

export-images:
	docker pull registry.geekcoders.cz/gc/x/mirror-redis:6.0-buster
	docker save registry.geekcoders.cz/gc/x/mirror-redis:6.0-buster > images/redis-6-0-buster.tar
	docker pull registry.geekcoders.cz/gc/x/mirror-mongo:5
	docker save registry.geekcoders.cz/gc/x/mirror-mongo:5 > images/mongo-5.tar
	docker pull registry.geekcoders.cz/gc/x/mirror-mongo-express:0.54
	docker save registry.geekcoders.cz/gc/x/mirror-mongo-express:0.54 > images/mongo-express-54.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/runtime-php8:latest
	docker save registry.geekcoders.cz/inspectlife/monorepo/runtime-php8:latest > images/runtime-php8-latest.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/auth-server:master
	docker save registry.geekcoders.cz/inspectlife/monorepo/auth-server:master > images/auth-server.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/base-server:master
	docker save registry.geekcoders.cz/inspectlife/monorepo/base-server:master > images/base-server.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/cal-server:master
	docker save registry.geekcoders.cz/inspectlife/monorepo/cal-server:master > images/cal-server.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/edgy-config-server:master
	docker save registry.geekcoders.cz/inspectlife/monorepo/edgy-config-server:master > images/edgy-config-server.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/edgy-workers:master
	docker save registry.geekcoders.cz/inspectlife/monorepo/edgy-workers:master > images/edgy-workers.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/file-proxy:master
	docker save registry.geekcoders.cz/inspectlife/monorepo/file-proxy:master > images/file-proxy.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/rabbitmq:latest
	docker save registry.geekcoders.cz/inspectlife/monorepo/rabbitmq:latest > images/mirror-rabbitmq-management-alpine.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/notification-server:master
	docker save registry.geekcoders.cz/inspectlife/monorepo/notification-server:master > images/notification-server.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/ordering-server:master
	docker save registry.geekcoders.cz/inspectlife/monorepo/ordering-server:master > images/ordering-server.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/telerehab-processor:master
	docker save registry.geekcoders.cz/inspectlife/monorepo/telerehab-processor:master > images/telerehab-processor.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/telerehab-server:master
	docker save registry.geekcoders.cz/inspectlife/monorepo/telerehab-server:master > images/telerehab-server.tar
	docker pull registry.geekcoders.cz/inspectlife/monorepo/portal-ui:master
	docker save registry.geekcoders.cz/inspectlife/monorepo/portal-ui:master > images/portal-ui.tar

load-images:
	docker load < images/mongo-express-54.tar
	docker load < images/mongo-5.tar
	docker load < images/redis-6-0-buster.tar
	docker load < images/runtime-php8-latest.tar
	docker load < images/auth-server.tar
	docker load < images/base-server.tar
	docker load < images/cal-server.tar
	docker load < images/edgy-config-server.tar
	docker load < images/edgy-workers.tar
	docker load < images/file-proxy.tar
	docker load < images/mirror-rabbitmq-management-alpine.tar
	docker load < images/notification-server.tar
	docker load < images/ordering-server.tar
	docker load < images/telerehab-processor.tar
	docker load < images/telerehab-server.tar
	docker load < images/portal-ui.tar

swarm-init:
	docker network create --driver overlay inbound
	touch acme.json
	chmod -R 600 acme.json

prod-init: swarm-init load-images

prod-start:
	export BASE_HOST="il.ciirc.cvut.cz" && \
		docker stack deploy -c traefik.yml traefik --with-registry-auth && \
		docker stack deploy -c swarmpit.yml swarmpit --with-registry-auth && \
		docker stack deploy -c docker-compose.prod.yml inspectlife --with-registry-auth

dev-start: dev-stop ## After dev-init, dev-start starts the project
	docker compose up -d --remove-orphans

dev-init: dev-stop ## Init the project and build all the images
	docker compose pull
	docker compose up -d --remove-orphans
	# Prepare services
	for i in $(SERVICES); do \
	docker compose exec $$i composer install --ignore-platform-reqs; \
	done

mongo-seed: ## Seeds the mongo database with basic users and information
	# Mongo Cleanup
	./find.sh inspectlife_mongo.1 "mongo -u root -p secret /mongo-seed/_clean.js"
	# Mongo Imports
	./find.sh inspectlife_mongo.1 "mongoimport --uri 'mongodb://root:secret@mongo:27017/?authSource=admin' -d auth -c clients /mongo-seed/clients.auth.json"
	./find.sh inspectlife_mongo.1 "mongoimport --uri 'mongodb://root:secret@mongo:27017/?authSource=admin' -d auth -c users /mongo-seed/users.auth.json"
	./find.sh inspectlife_mongo.1 "mongoimport --uri 'mongodb://root:secret@mongo:27017/?authSource=admin' -d base -c patients /mongo-seed/patients.base.json"

dev-stop: ## Stops dev
	docker compose down --remove-orphans

composer-dump-autoload: ## composer dump autoload for all services
	for i in $(SERVICES); do \
	docker compose exec $$i php8 /bin/composer dump-autoload; \
	done

build-all: ## Build all production images, DONT USE!!! All production images are built by pipelines
	cd auth-server; docker build --build-arg FROM_TAG=latest -t registry.geekcoders.cz/inspectlife/monorepo/auth-server:latest .
	cd base-server; docker build --build-arg FROM_TAG=latest -t registry.geekcoders.cz/inspectlife/monorepo/base-server:latest .
	cd file-proxy; docker build --build-arg FROM_TAG=latest -t registry.geekcoders.cz/inspectlife/monorepo/file-proxy:latest .
	cd cal-server; docker build --build-arg FROM_TAG=latest -t registry.geekcoders.cz/inspectlife/monorepo/cal-server:latest .
	cd ordering-server; docker build --build-arg FROM_TAG=latest -t registry.geekcoders.cz/inspectlife/monorepo/ordering-server:latest .
	cd notification-server; docker build --build-arg FROM_TAG=latest -t registry.geekcoders.cz/inspectlife/monorepo/notification-server:latest .

push-all: ## Push to repository, DONT USE!!! All production images are pushed by pipelines
	docker push registry.geekcoders.cz/inspectlife/monorepo/auth-server:latest
	docker push registry.geekcoders.cz/inspectlife/monorepo/base-server:latest
	docker push registry.geekcoders.cz/inspectlife/monorepo/file-proxy:latest
	docker push registry.geekcoders.cz/inspectlife/monorepo/cal-server:latest
	docker push registry.geekcoders.cz/inspectlife/monorepo/ordering-server:latest
	docker push registry.geekcoders.cz/inspectlife/monorepo/notification-server:latest

build-all-dev: ## Build all development images
	cd auth-server; make build-dev
	cd base-server; make build-dev
	cd file-proxy; make build-dev
	cd cal-server; make build-dev
	cd ordering-server; make build-dev
	cd edgy-config-server; make build-dev
	cd telerehab-server; make build-dev
	cd notification-server; make build-dev

rr-reload: ## Reload roadrunner in all services
	for i in $(SERVICES); do \
	docker compose exec $$i php8 /app/artisan octane:reload; \
	done

gen-jwt: ## Generate jwt token in auth service
	./find.sh inspectlife_auth "php /var/www/artisan generate-jwt --client=60c1db0c7039c43054191ea2"
