SUBDIRS = src

# ===========================
#  Caminhos e artefactos
# ===========================
TOP_DIR   = $(shell pwd)
DIST_DIR  = $(TOP_DIR)/dist
BUILD_DIR = $(TOP_DIR)/build
GIT_VER   = $(shell git describe --tags --always --dirty 2>/dev/null || echo "0.1-dev")
SRC_TAR   = $(DIST_DIR)/neoricalex-$(GIT_VER)-src.tar.gz

# ===========================
#  Configurações de Git
# ===========================
GIT_USER    ?= "neo.webmaster.2@gmail.com"
GIT_EMAIL   ?= "neo.webmaster.2@gmail.com"
GIT_REMOTE  ?= "origin"
GIT_BRANCH  ?= "main"
COMMIT_MSG  ?= "Auto-commit via make git"

# ===========================
#  Alvos principais
# ===========================
.PHONY: all tarball git release run clean-local check-remote

all: $(DIST_DIR)

$(DIST_DIR):
	@mkdir -p $(DIST_DIR)

# ===========================
#  Empacotamento do código-fonte
# ===========================
tarball: $(SRC_TAR)

$(SRC_TAR):
	@echo "[TAR] Empacotando código-fonte (versão $(GIT_VER))..."
	@mkdir -p "$(DIST_DIR)" "$(BUILD_DIR)"
	cd "$(TOP_DIR)" && tar \
		--exclude="$(notdir $(SRC_TAR))" \
		--exclude="$(DIST_DIR)" \
		--exclude="$(BUILD_DIR)" \
		--exclude='*/__pycache__' \
		--exclude='*/.venv' \
		--exclude='*/venv' \
		--exclude='*.pyc' \
		--exclude='*.pyo' \
		--exclude='*.o' \
		--exclude='*.a' \
		--exclude='*.so' \
		-czf "$(SRC_TAR)" .
	@echo "[✔] Tarball gerado em $(SRC_TAR)"

# ===========================
#  Git (commit + push)
# ===========================
git: check-remote
	@echo "📦 Commit automático → Gitea"
	@git config user.name $(GIT_USER)
	@git config user.email $(GIT_EMAIL)
	@git rev-parse --abbrev-ref HEAD >/dev/null 2>&1 || true
	@git add -A
	@git commit -m "$$(echo '$(COMMIT_MSG)')" || echo "Nenhuma modificação para commitar."
	@git push $(GIT_REMOTE) $(GIT_BRANCH)

# ===========================
#  Release (Tarball + Tag)
# ===========================
release: tarball check-remote
	@echo "🚀 Publicando build em dist/releases (versão: $(GIT_VER))"
	@mkdir -p $(DIST_DIR)/releases
	@cp $(SRC_TAR) $(DIST_DIR)/releases/ 2>/dev/null || echo "⚠️ Nenhum tarball encontrado. Execute 'make tarball' primeiro."
	@echo "📦 Adicionando releases ignoradas (forçado)"
	@git add -f $(DIST_DIR)/releases/* 2>/dev/null || echo "⚠️ Nenhum artefato novo para adicionar."
	@git commit -m "Build automático: release $(GIT_VER)" || echo "Nenhum ficheiro novo para commitar."
	@git push origin main
	@TAG="$(GIT_VER)"; \
	if git rev-parse "$$TAG" >/dev/null 2>&1; then \
		echo "⚠️ Tag $$TAG já existente."; \
	else \
		echo "🏷  Criando tag $$TAG"; \
		git tag -a "$$TAG" -m "Release automática $$TAG"; \
		git push origin "$$TAG"; \
	fi

# ===========================
#  Git Remote (HTTPS → SSH Auto-Fix)
# ===========================
check-remote:
	@REMOTE_URL=$$(git remote get-url $(GIT_REMOTE)); \
	if echo $$REMOTE_URL | grep -q '^https://gitea\.neoricalex\.com'; then \
		echo "⚠️  Repositório configurado com HTTPS:"; \
		echo "    $$REMOTE_URL"; \
		echo "🔄  Convertendo para SSH (porta 2222)..."; \
		SSH_URL=$$(echo $$REMOTE_URL | sed -E 's|https://gitea\.neoricalex\.com[:/]+|ssh://git@gitea.neoricalex.com:2222/|'); \
		git remote set-url $(GIT_REMOTE) $$SSH_URL; \
		echo "✅  Remote atualizado para:"; \
		git remote -v; \
	else \
		echo "✅  Remote SSH já configurado:"; \
		git remote -v | grep $(GIT_REMOTE); \
	fi; \
	echo "🔍  Testando conectividade SSH com Gitea..."; \
	if ssh -T git@gitea.neoricalex.com -p 2222 2>&1 | grep -q "successfully authenticated"; then \
		echo "✅  Conexão SSH funcional com Gitea."; \
	else \
		echo "❌  Falha na autenticação SSH com Gitea."; \
		echo "   Verifique a chave em ~/.ssh/id_ed25519.pub e nas SSH Keys do Gitea."; \
		exit 1; \
	fi

# ===========================
#  Teste
# ===========================
run:
	@python3 src/manager/manager_main.py

# ===========================
#  Limpeza
# ===========================
clean-local:
	@echo "[CLEAN] Removendo diretórios temporários..."
	@rm -rf $(BUILD_DIR)
	@find $(DIST_DIR) -maxdepth 1 -type f ! -path "$(DIST_DIR)/releases/*" -delete 2>/dev/null || true
	@echo "[✔] Limpeza concluída (releases preservadas)"
