.DEFAULT_GOAL := help

COMPOSE      := docker compose --env-file backend/.env
COMPOSE_PROD := docker compose -f docker-compose.prod.yml --env-file backend/.env

.PHONY: help
help:
	@echo ""
	@echo "Local (your laptop)"
	@echo "  make up          Start app"
	@echo "  make down        Stop app"
	@echo "  make logs        Show logs"
	@echo "  make ps          Show running containers"
	@echo "  make sh          Open backend shell"
	@echo "  make migrate     Run database migrations"
	@echo "  make seed        Fill demo data"
	@echo "  make artisan c=\"...\"   Run any artisan command"
	@echo "  make test        Run backend tests"
	@echo "  make restart     Restart all local containers"
	@echo ""
	@echo "Production (the server)"
	@echo "  make prod-up         Start app (rebuilds images)"
	@echo "  make prod-down       Stop app"
	@echo "  make prod-logs       Show logs"
	@echo "  make prod-ps         Show running containers"
	@echo "  make prod-sh         Open backend shell"
	@echo "  make prod-migrate    Run database migrations"
	@echo "  make prod-artisan c=\"...\"  Run any artisan command"
	@echo "  make prod-restart    Restart running containers"
	@echo "  make prod-build      Rebuild images only"
	@echo "  make prod-cache      Refresh Laravel config cache"
	@echo "  make prod-horizon    Show queue worker status"
	@echo "  make prod-deploy SHA=<commit>  Deploy one git SHA (server only)"
	@echo ""

# ---- local ----

.PHONY: up
up:
	$(COMPOSE) up -d --build

.PHONY: down
down:
	$(COMPOSE) down

.PHONY: logs
logs:
	$(COMPOSE) logs -f --tail=100

.PHONY: ps
ps:
	$(COMPOSE) ps

.PHONY: build
build:
	$(COMPOSE) build

.PHONY: sh
sh:
	$(COMPOSE) exec backend sh

.PHONY: migrate
migrate:
	$(COMPOSE) exec backend php artisan migrate

.PHONY: seed
seed:
	$(COMPOSE) exec backend php artisan db:seed

.PHONY: artisan
artisan:
	$(COMPOSE) exec backend php artisan $(c)

.PHONY: test
test:
	$(COMPOSE) exec backend php artisan test

.PHONY: restart
restart:
	$(COMPOSE) restart

# ---- production ----

.PHONY: prod-up
prod-up:
	@# Keep :8010 on loopback so punch/whitelist see real client IP via backend-edge :80.
	BACKEND_BIND=$${BACKEND_BIND:-127.0.0.1} $(COMPOSE_PROD) up -d --build

.PHONY: prod-down
prod-down:
	$(COMPOSE_PROD) down

.PHONY: prod-logs
prod-logs:
	$(COMPOSE_PROD) logs -f --tail=100

.PHONY: prod-ps
prod-ps:
	$(COMPOSE_PROD) ps

.PHONY: prod-build
prod-build:
	@BACKEND_BIND=$${BACKEND_BIND:-127.0.0.1} $(COMPOSE_PROD) build

.PHONY: prod-sh
prod-sh:
	$(COMPOSE_PROD) exec backend sh

.PHONY: prod-migrate
prod-migrate:
	$(COMPOSE_PROD) exec backend php artisan migrate --force

.PHONY: prod-artisan
prod-artisan:
	$(COMPOSE_PROD) exec backend php artisan $(c)

.PHONY: prod-restart
prod-restart:
	$(COMPOSE_PROD) restart

.PHONY: prod-cache
prod-cache:
	$(COMPOSE_PROD) exec backend php artisan config:cache
	$(COMPOSE_PROD) exec backend php artisan view:cache
	$(COMPOSE_PROD) exec queue php artisan horizon:terminate

.PHONY: prod-horizon
prod-horizon:
	$(COMPOSE_PROD) exec queue php artisan horizon:status

.PHONY: prod-deploy
prod-deploy:
	@test -n "$(SHA)" || (echo "Usage: make prod-deploy SHA=<40-char-commit>"; exit 1)
	./scripts/deploy-production.sh $(SHA)
