# IoT PreTester V3 - Docker Management Makefile
# Provides convenient shortcuts for common Docker operations

.PHONY: help build up down restart logs shell-backend shell-frontend clean backup test

# Default target
help:
	@echo "IoT PreTester V3 - Docker Commands"
	@echo "=================================="
	@echo ""
	@echo "Setup & Build:"
	@echo "  make setup          - Initial setup (create .env, build images)"
	@echo "  make build          - Build Docker images"
	@echo "  make rebuild        - Rebuild images without cache"
	@echo ""
	@echo "Container Management:"
	@echo "  make up             - Start all containers"
	@echo "  make down           - Stop all containers"
	@echo "  make restart        - Restart all containers"
	@echo "  make status         - Show container status"
	@echo ""
	@echo "Logs & Monitoring:"
	@echo "  make logs           - View all logs (follow mode)"
	@echo "  make logs-backend   - View backend logs"
	@echo "  make logs-frontend  - View frontend logs"
	@echo ""
	@echo "Shell Access:"
	@echo "  make shell-backend  - Access backend container shell"
	@echo "  make shell-frontend - Access frontend container shell"
	@echo ""
	@echo "Database:"
	@echo "  make migrate        - Run Django migrations"
	@echo "  make makemigrations - Create Django migrations"
	@echo "  make superuser      - Create Django superuser (interactive)"
	@echo "  make dbshell        - Access database shell"
	@echo "  make backup         - Backup database"
	@echo ""
	@echo "Maintenance:"
	@echo "  make clean          - Remove containers and volumes"
	@echo "  make clean-all      - Remove everything (images, volumes, data)"
	@echo "  make update         - Update and restart services"
	@echo ""
	@echo "Development:"
	@echo "  make test           - Run tests"
	@echo "  make check          - Run health checks"
	@echo ""

# Initial setup
setup:
	@echo "Setting up IoT PreTester V3..."
	@if [ ! -f .env ]; then \
		echo "Creating .env file from template..."; \
		cp .env.example .env; \
		echo "⚠️  Please edit .env and set your configuration!"; \
	else \
		echo ".env file already exists"; \
	fi
	@echo "Building Docker images..."
	@docker-compose build
	@echo "✓ Setup complete!"
	@echo ""
	@echo "Next steps:"
	@echo "1. Edit .env file with your configuration"
	@echo "2. Run 'make up' to start the application"

# Build images
build:
	docker-compose build

rebuild:
	docker-compose build --no-cache

# Start/Stop containers
up:
	docker-compose up -d
	@echo "Containers started!"
	@echo "Frontend: http://localhost:3000"
	@echo "Backend:  http://localhost:8000/api/"
	@echo ""
	@echo "Use 'make logs' to view logs"

down:
	docker-compose down

restart:
	docker-compose restart

status:
	docker-compose ps

# Logs
logs:
	docker-compose logs -f

logs-backend:
	docker-compose logs -f backend

logs-frontend:
	docker-compose logs -f frontend

# Shell access
shell-backend:
	docker-compose exec backend bash

shell-frontend:
	docker-compose exec frontend sh

# Django management
migrate:
	docker-compose exec backend python django_project/manage.py migrate

makemigrations:
	docker-compose exec backend python django_project/manage.py makemigrations

superuser:
	docker-compose exec backend python django_project/manage.py createsuperuser

dbshell:
	docker-compose exec backend sqlite3 /app/data/db.sqlite3

# Database backup
backup:
	@mkdir -p backups
	@echo "Creating backup..."
	@docker-compose exec -T backend sqlite3 /app/data/db.sqlite3 .dump > backups/db_backup_$$(date +%Y%m%d_%H%M%S).sql
	@echo "✓ Database backup created in backups/"

# Cleanup
clean:
	docker-compose down -v
	@echo "✓ Containers and volumes removed"

clean-all: clean
	docker-compose down --rmi all -v
	rm -rf data/ logs/
	@echo "✓ Everything cleaned (images, volumes, data)"

# Update
update:
	@echo "Updating IoT PreTester V3..."
	git pull
	docker-compose build
	docker-compose up -d
	docker-compose exec backend python django_project/manage.py migrate
	@echo "✓ Update complete!"

# Health check
check:
	@echo "Checking container health..."
	@docker-compose ps
	@echo ""
	@echo "Backend health:"
	@curl -f http://localhost:8000/api/ 2>/dev/null && echo "✓ Backend is healthy" || echo "✗ Backend is down"
	@echo ""
	@echo "Frontend health:"
	@curl -f http://localhost:3000 2>/dev/null && echo "✓ Frontend is healthy" || echo "✗ Frontend is down"

# Tests
test:
	docker-compose exec backend python django_project/manage.py test
