.PHONY: stand delete-stand check-name testing migrations check-dest-db restore_database restore_staff4_database clone_testing

CONFIG = RELEASER_PROJECT_CONFIG=".release.stand.hjson"
source ?= $(name)
BRANCH = $(shell git branch | grep \* | cut -d ' ' -f2)

stand: check-name
	@$(CONFIG) ya tool releaser env-dump -e $(source) --dump .stand.dump || $(CONFIG) ya tool releaser env-dump -e stand --dump .stand.dump
	@$(CONFIG) ya tool releaser stand --standname $(name) --var CONFIG_hosts_staffback_host=staff-$(name).test.tools.yandex-team.ru/api $(args) || true
	@rm .stand.dump

delete-stand: check-name
	@$(CONFIG) ya tool releaser env-delete -e $(name);

check-name:
	@test $(name) || (echo 'Usage: make COMMAND name=STANDNAME'; exit 1)

testing:
	@ya tool releaser build -v $(BRANCH)
	@ya tool releaser push -v $(BRANCH)
	@ya tool releaser deploy -v $(BRANCH)

migrations:
	@docker-compose run backend staff makemigrations --settings=staff.makemigrations_settings $(app)


SOURCE_PASS = PGPASSWORD=$(shell ya vault get version $(shell ya vault list secrets -q staff-prod-psql --json | jq -r ".[0].last_secret_version.version") -o password)
DEST_PASS = PGPASSWORD=$(shell ya vault get version $(shell ya vault list secrets -q staff_database_testing --json | jq -r ".[0].last_secret_version.version") -o password)

SOURCE_HOST = $(shell yc managed-postgresql hosts list --cluster-name staff-prod-psql --format json | jq -r 'map(select(.role == "REPLICA").name)[0]')
DEST_HOST = $(shell yc managed-postgresql hosts list --cluster-name staff-testing-psql --format json | jq -r 'map(select(.role == "MASTER").name)[0]')
SOURCE_DB = staff4
DEST_DB = $(db)
PORT = 6432
LOGIN = staff4

COMPRESSION = --compress=5
NO_PRIVELEGES = --no-owner --no-privileges
CLEAN = --if-exists --clean
FORMAT = --format=c
ONLY_SCHEMA = --schema-only
ONLY_DATA = --data-only
SINGLE_TRANSACTION = --single-transaction

EXCLUDE_TABLES_FOR_TESTING = --exclude-table='public.((rfid_badge*)|(monitorings_fixedemissionevents)|(oebs_storedresponse)|(emission_*)|(vcard_*)|(preprofile_preprofile*)|(preprofile_person*)|(audit_log)|(babylon_log)|(notifications_messagethread)|(budget_position_changeregistry)|(budget_position_workflow)|(departments_headcountposition)|(oebs_headcountposition)|(femida_femidavacancy)|(departments_vacancy))'
EXCLUDE_TABLES_FOR_OEBS    = --exclude-table='public.((monitorings_fixedemissionevents)|(oebs_storedresponse)|(emission_*)|(vcard_*)|(notifications_messagethread)|(budget_position_changeregistry)|(budget_position_workflow)|(femida_femidavacancy)|(departments_vacancy))'

PG_DUMP = $(SOURCE_PASS) pg_dump $(FORMAT) -d $(SOURCE_DB) -h $(SOURCE_HOST) -p $(PORT) -U $(LOGIN)
PG_RESTORE = $(DEST_PASS) pg_restore -d $(DEST_DB) -h $(DEST_HOST) -p $(PORT) -U $(LOGIN) $(NO_PRIVELEGES)

check-dest-db:
	@test $(db) || (echo 'Usage: make clone_testing db=<destination database name>'; exit 1)

restore_database:
	@echo "\033[0;31mGonna\033[0m \033[0;32mCreate\033[0m \033[0;33mDatabase\033[0m \033[0;34m$(DEST_DB)\033[0m"
	@-yc managed-postgresql database create $(DEST_DB) --owner staff4 --lc-collate ru_RU.UTF-8 --lc-type ru_RU.UTF-8 --cluster-name staff-testing-psql --extensions postgis=2.5

	@echo "\033[0;31mGonna\033[0m \033[0;32mDump\033[0m \033[0;33mAnd\033[0m \033[0;34mRestore\033[0m \033[0;35mSchema\033[0m"
	@-$(PG_DUMP) $(COMPRESSION) $(ONLY_SCHEMA) | $(PG_RESTORE) $(CLEAN)

	@echo "\033[0;31mGonna\033[0m \033[0;32mDump\033[0m \033[0;33mAnd\033[0m \033[0;34mRestore\033[0m \033[0;35mData\033[0m"
	@-$(PG_DUMP) $(COMPRESSION) $(EXCLUDE_TABLES_FOR_TESTING) $(ONLY_DATA) | $(PG_RESTORE)

	@echo "\033[0;31mGonna\033[0m \033[0;32mDeploy\033[0m \033[0;33mTesting\033[0m \033[0;34mWith\033[0m \033[0;35mNew\033[0m \033[0;36mDatabase\033[0m"
	@ya tool releaser deploy --var DATABASE_NAME=$(DEST_DB)

# TODO: Кто-нибудь знает как это не копировать?
restore_staff4_database:
	@$(eval DEST_DB := staff4)

	@echo "\033[0;31mGonna\033[0m \033[0;32mDelete\033[0m \033[0;33mDatabase\033[0m \033[0;34m$(DEST_DB)\033[0m"
	@-yc managed-postgresql database delete $(DEST_DB) --cluster-name staff-testing-psql

	@echo "\033[0;31mGonna\033[0m \033[0;32mCreate\033[0m \033[0;33mDatabase\033[0m \033[0;34m$(DEST_DB)\033[0m"
	@-yc managed-postgresql database create $(DEST_DB) --owner staff4 --lc-collate ru_RU.UTF-8 --lc-type ru_RU.UTF-8 --cluster-name staff-testing-psql

	@echo "\033[0;31mGonna\033[0m \033[0;32mDump\033[0m \033[0;33mAnd\033[0m \033[0;34mRestore\033[0m \033[0;35mSchema\033[0m"
	-$(PG_DUMP) $(COMPRESSION) $(ONLY_SCHEMA) | $(PG_RESTORE) $(CLEAN)

	@echo "\033[0;31mGonna\033[0m \033[0;32mDump\033[0m \033[0;33mAnd\033[0m \033[0;34mRestore\033[0m \033[0;35mData\033[0m"
	@-$(PG_DUMP) $(COMPRESSION) $(EXCLUDE_TABLES_FOR_TESTING) $(ONLY_DATA) | $(PG_RESTORE)

	@echo "\033[0;31mGonna\033[0m \033[0;32mDeploy\033[0m \033[0;33mTesting\033[0m \033[0;34mWith\033[0m \033[0;35mNew\033[0m \033[0;36mDatabase\033[0m"
	@ya tool releaser deploy --var DATABASE_NAME=$(DEST_DB)

clone_testing: restore_database restore_staff4_database
