.PHONY: deploy redeploy build up down restart logs migrate migrate-new migrate-history frontend test test-cov reindex reindex-obsidian

# Blue-green: detect the running color (default blue when nothing is running)
ACTIVE_COLOR := $(shell docker compose ps --status running --services 2>/dev/null | grep -oE 'raggr-(blue|green)' | head -1 | cut -d- -f2)
ifeq ($(ACTIVE_COLOR),)
ACTIVE_COLOR := blue
endif
RAGGR := raggr-$(ACTIVE_COLOR)
# Both profiles enabled for commands that only touch existing containers
# (never use this with `up`, which would start both colors)
COMPOSE := docker compose --profile blue --profile green

# Build and deploy
deploy: build up

# Zero-downtime blue-green swap (see scripts/deploy.sh)
redeploy:
	git pull && ./scripts/deploy.sh

build:
	docker compose --profile $(ACTIVE_COLOR) build $(RAGGR)

up:
	docker compose --profile $(ACTIVE_COLOR) up -d

down:
	$(COMPOSE) down

restart:
	$(COMPOSE) restart $(RAGGR)

logs:
	$(COMPOSE) logs -f $(RAGGR)

# Vector store reindexing
reindex:
	$(COMPOSE) exec $(RAGGR) python -c "\
		import asyncio; \
		from blueprints.rag.logic import delete_all_documents, index_documents, index_obsidian_documents; \
		delete_all_documents(); \
		asyncio.run(index_documents()); \
		asyncio.run(index_obsidian_documents()); \
		print('Reindex complete')"

reindex-obsidian:
	$(COMPOSE) exec $(RAGGR) python -c "\
		import asyncio; \
		from blueprints.rag.logic import delete_documents_by_metadata, index_obsidian_documents; \
		delete_documents_by_metadata('source', 'obsidian'); \
		asyncio.run(index_obsidian_documents()); \
		print('Obsidian reindex complete')"

# Database migrations
migrate:
	$(COMPOSE) exec $(RAGGR) aerich upgrade

migrate-new:
	@read -p "Migration name: " name; \
	$(COMPOSE) exec $(RAGGR) aerich migrate --name $$name

migrate-history:
	$(COMPOSE) exec $(RAGGR) aerich history

# Tests
test:
	pytest tests/ -v

test-cov:
	pytest tests/ -v --cov

# Frontend
frontend:
	cd raggr-frontend && yarn install && yarn build
