SHELL :=/bin/bash

.PHONY: clean check setup docker-build docker-up docker-down docker-logs docker-restart docker-backup
.DEFAULT_GOAL=help
VENV_DIR = .venv
PYTHON_VERSION = python3

check: # Ruff check
	@ruff check .
	@echo "✅ Check complete!"

fix: # Fix auto-fixable linting issues
	@ruff check app.py --fix

clean: # Clean temporary files
	@rm -rf __pycache__ .pytest_cache
	@find . -name '*.pyc' -exec rm -r {} +
	@find . -name '__pycache__' -exec rm -r {} +
	@rm -rf build dist
	@find . -name '*.egg-info' -type d -exec rm -r {} +

run: # Run the application
	@PYTHONPATH=src streamlit run app.py

setup: # Initial project setup
	@echo "Creating virtual env at: $(VENV_DIR)"
	@$(PYTHON_VERSION) -m venv $(VENV_DIR)
	@echo "Installing dependencies..."
	@source $(VENV_DIR)/bin/activate && pip install -r requirements/requirements-dev.txt && pip install -r requirements/requirements.txt
	@echo -e "\n✅ Done.\n🎉 Run the following commands to get started:\n\n ➡️ source $(VENV_DIR)/bin/activate\n ➡️ export OPENAI_API_KEY=your_api_key_here\n ➡️ make run\n"


docker-build: # Build Docker image
	@echo "Building Docker image..."
	@docker compose build
	@echo "✅ Docker image built!"

docker-up: # Start the application with Docker Compose
	@echo "Starting RAG application with Docker Compose..."
	@docker compose up -d
	@echo "✅ Application started! Access at http://localhost:8501"

docker-down: # Stop the application
	@echo "Stopping RAG application..."
	@docker compose down
	@echo "✅ Application stopped!"

docker-logs: # View application logs
	@docker compose logs -f rag-app

docker-restart: # Restart the application
	@echo "Restarting RAG application..."
	@docker compose restart rag-app
	@echo "✅ Application restarted!"

docker-backup: # Backup persistent data
	@echo "Creating backup directory..."
	@mkdir -p backups
	@echo "Backing up ChromaDB data..."
	@docker run --rm -v drakkenheim_chroma_data:/data -v $(PWD)/backups:/backup alpine tar czf /backup/chroma_data_$$(date +%Y%m%d_%H%M%S).tar.gz -C /data .
	@echo "Backing up processed files..."
	@docker run --rm -v drakkenheim_processed_files:/data -v $(PWD)/backups:/backup alpine tar czf /backup/processed_files_$$(date +%Y%m%d_%H%M%S).tar.gz -C /data .
	@echo "✅ Backup completed! Check the backups/ directory"

docker-clean: # Clean up Docker resources
	@echo "Cleaning up Docker resources..."
	@docker compose down
	@docker system prune -f
	@echo "✅ Docker cleanup completed!"

help: # Show this help
	@egrep -h '\s#\s' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?# "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'