# Define variables
DOCKER_COMPOSE = docker-compose
DOCKER_RUN = $(DOCKER_COMPOSE) run --rm backend


# General
# -------

# Default target
.PHONY: up
up: docker-up

# Shortcut for first start (initializing database, etc.)
.PHONY: first-start
first-start: docker-build db-upgrade docker-up


# Container management
# --------------------

.PHONY: docker-up
docker-up:
	$(DOCKER_COMPOSE) up --build

.PHONY: docker-down
docker-down:
	$(DOCKER_COMPOSE) down --remove-orphans

.PHONY: docker-build
docker-build:
	$(DOCKER_COMPOSE) build

.PHONY: docker-rebuild
docker-rebuild:
	$(DOCKER_COMPOSE) build --pull --no-cache

.PHONY: docker-purge
docker-purge:
	$(DOCKER_COMPOSE) down --remove-orphans --volumes

.PHONY: docker-restart
docker-restart:
	$(DOCKER_COMPOSE) restart $(SERVICE)

.PHONY: docker-logs
docker-logs:
	$(DOCKER_COMPOSE) logs -f $(SERVICE) || true

.PHONY: docker-run
docker-run:
	$(DOCKER_RUN) $(CMD)

.PHONY: docker-shell
docker-shell:
	$(DOCKER_RUN) bash


# Database management
# -------------------

# Run migrations to upgrade the database to the head revision (set REVISION parameter to override)
.PHONY: db-upgrade
db-upgrade:
	$(DOCKER_RUN) alembic upgrade $(or $(REVISION),head)

# Run migrations to downgrade the database to the previous revision (set REVISION parameter to override)
.PHONY: db-downgrade
db-downgrade:
	$(DOCKER_RUN) alembic downgrade $(or $(REVISION),-1)

# Autogenerate a revision for database migration (requires MESSAGE parameter to set the revision message)
.PHONY: db-generate-migration
db-generate-migration:
	@test -n "$(MESSAGE)" || (echo "Please set the revision message: make db-generate-migration MESSAGE=\"...\""; exit 1)
	$(DOCKER_RUN) alembic revision --autogenerate -m "$(MESSAGE)"
