COMPOSE := docker compose
ENV_FILE := .env
ENV_EXAMPLE := .env.example
PROD_COMPOSE := docker-compose.prod.yml

REGISTRY ?= forge.lclr.dev
NAMESPACE ?= thibaud-lclr
IMAGE_PREFIX ?= api-client
TAG ?= latest

BACKEND_IMAGE := $(REGISTRY)/$(NAMESPACE)/$(IMAGE_PREFIX)-backend:$(TAG)
APP_IMAGE := $(REGISTRY)/$(NAMESPACE)/$(IMAGE_PREFIX)-app:$(TAG)
SH_ADMIN_IMAGE := $(REGISTRY)/$(NAMESPACE)/$(IMAGE_PREFIX)-sh-admin:$(TAG)

PROD_ENV := API_CLIENT_REGISTRY=$(REGISTRY) API_CLIENT_NAMESPACE=$(NAMESPACE) API_CLIENT_IMAGE_PREFIX=$(IMAGE_PREFIX) API_CLIENT_TAG=$(TAG)

.PHONY: up dev-up prod-up down dev-down prod-down logs dev-logs prod-logs ps dev-ps prod-ps ensure-env docker-build-images docker-push-images docker-build-push-images

up: dev-up

dev-up: ensure-env
	$(COMPOSE) up -d --build

prod-up: ensure-env
	$(PROD_ENV) $(COMPOSE) -f $(PROD_COMPOSE) up -d

down: dev-down

dev-down:
	$(COMPOSE) down

prod-down:
	$(PROD_ENV) $(COMPOSE) -f $(PROD_COMPOSE) down

logs: dev-logs

dev-logs:
	$(COMPOSE) logs -f

prod-logs:
	$(PROD_ENV) $(COMPOSE) -f $(PROD_COMPOSE) logs -f

ps: dev-ps

dev-ps:
	$(COMPOSE) ps

prod-ps:
	$(PROD_ENV) $(COMPOSE) -f $(PROD_COMPOSE) ps

ensure-env:
	@test -f $(ENV_FILE) || cp $(ENV_EXAMPLE) $(ENV_FILE)

docker-build-images:
	docker build --file prod.Dockerfile --target backend --tag $(BACKEND_IMAGE) .
	docker build --file prod.Dockerfile --target app --tag $(APP_IMAGE) .
	docker build --file prod.Dockerfile --target sh_admin --tag $(SH_ADMIN_IMAGE) .

docker-push-images:
	docker push $(BACKEND_IMAGE)
	docker push $(APP_IMAGE)
	docker push $(SH_ADMIN_IMAGE)

docker-build-push-images: docker-build-images docker-push-images
