ENV ?= prod
COMPOSE_FILE = docker-compose.yml
ENV_FILE = .env.$(ENV)

PROJECT_NAME = attendancesystem-$(ENV)
NETWORK_NAME = attendancesystem-network

.PHONY: app install update reset-network nuke nuke-project

# ===============================
# 🧹 Reset Network
# ===============================
reset-network:
	@echo "🧹 Removendo rede antiga (se existir)..."
	-docker network rm $(NETWORK_NAME) 2>/dev/null || true

# ===============================
# 🧩 Subir apenas APP
# ===============================
app:
	@echo "📥 Baixando imagens de APP ($(PROJECT_NAME))..."
	docker compose \
		--project-name $(PROJECT_NAME) \
		--env-file $(ENV_FILE) \
		--profile app \
		-f $(COMPOSE_FILE) \
		pull
	@echo "🚀 Subindo apenas APP ($(PROJECT_NAME))..."
	docker compose \
		--project-name $(PROJECT_NAME) \
		--env-file $(ENV_FILE) \
		--profile app \
		-f $(COMPOSE_FILE) \
		up -d --pull never

# ===============================
# 🔥 Subir TUDO
# ===============================
install:
	@echo "📥 Baixando imagens ($(PROJECT_NAME))..."
	docker compose \
		--project-name $(PROJECT_NAME) \
		--env-file $(ENV_FILE) \
		--profile app \
		-f $(COMPOSE_FILE) \
		pull
	@echo "🚀 Subindo ambiente completo ($(PROJECT_NAME))..."
	docker compose \
		--project-name $(PROJECT_NAME) \
		--env-file $(ENV_FILE) \
		--profile app \
		-f $(COMPOSE_FILE) \
		up -d --pull never

# ===============================
# 🔄 Atualizar projeto
# ===============================
update: nuke-project install

# ===============================
# 💣 Limpeza TOTAL
# ===============================
nuke:
	@echo "💣 Iniciando limpeza do ambiente..."

	@echo "🛑 Parando containers..."
	- docker stop $$(docker ps -aq) 2>/dev/null || true

	@echo "🗑️ Removendo containers..."
	- docker rm -f $$(docker ps -aq) 2>/dev/null || true

	@echo "📦 Removendo volumes..."
	- docker volume rm $$(docker volume ls -q) 2>/dev/null || true

	@echo "🖼️ Removendo imagens..."
	- docker rmi -f $$(docker images -aq) 2>/dev/null || true

	@echo "🌐 Limpando redes não utilizadas..."
	- docker network prune -f 2>/dev/null || true

	@echo "🔥 Limpeza GLOBAL concluída."

# ===============================
# 🧹 Limpeza do projeto
# ===============================
nuke-project:
	@echo "🧹 Limpando o projeto $(PROJECT_NAME)..."

	@echo "🛑 Parando e removendo containers do projeto..."
	docker compose \
		--project-name $(PROJECT_NAME) \
		--env-file $(ENV_FILE) \
		--profile app \
		-f $(COMPOSE_FILE) \
		down --volumes --remove-orphans

	@echo "🖼️ Removendo imagens do projeto (seventhltda)..."
	- docker images --format '{{.Repository}}:{{.Tag}}' | grep '^seventhltda/' | xargs -r docker rmi -f 2>/dev/null || true

	@echo "✅ Projeto $(PROJECT_NAME) limpo (containers, volumes, rede e imagens)."
