# Global Gala Docker Management
.PHONY: help up down restart build logs shell composer artisan test clean

# Default target
.DEFAULT_GOAL := help

# Colors for output
GREEN := \033[0;32m
YELLOW := \033[0;33m
RED := \033[0;31m
NC := \033[0m # No Color

help: ## Show this help message
	@echo '${GREEN}Global Gala Docker Commands${NC}'
	@echo ''
	@echo 'Usage:'
	@echo '  ${YELLOW}make${NC} ${GREEN}<command>${NC}'
	@echo ''
	@echo 'Available commands:'
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "  ${YELLOW}%-15s${NC} %s\n", $$1, $$2}'

# Docker Compose Commands
up: ## Start all containers
	docker-compose up -d
	@echo "${GREEN}✓ All services started${NC}"
	@echo "Laravel app: http://localhost:8000"
	@echo "PhpMyAdmin: http://localhost:8080"
	@echo "Redis Commander: http://localhost:8081 (use: make debug)"
	@echo "Mailhog: http://localhost:8025 (use: make debug)"

down: ## Stop all containers
	docker-compose down
	@echo "${GREEN}✓ All services stopped${NC}"

restart: ## Restart all containers
	docker-compose restart
	@echo "${GREEN}✓ All services restarted${NC}"

build: ## Build/rebuild containers
	docker-compose build --no-cache
	@echo "${GREEN}✓ Containers rebuilt${NC}"

logs: ## Show logs from all containers
	docker-compose logs -f

logs-app: ## Show Laravel app logs
	docker-compose logs -f app

logs-horizon: ## Show Horizon worker logs
	docker-compose logs -f horizon

logs-mysql: ## Show MySQL logs
	docker-compose logs -f mysql

logs-redis: ## Show Redis logs
	docker-compose logs -f redis

# Container Access
shell: ## Access Laravel app container shell
	docker-compose exec app bash

shell-mysql: ## Access MySQL container shell
	docker-compose exec mysql bash

shell-redis: ## Access Redis CLI
	docker-compose exec redis redis-cli

# Laravel Commands
composer: ## Run composer install
	docker-compose exec app composer install

composer-update: ## Run composer update
	docker-compose exec app composer update

artisan: ## Run artisan command (usage: make artisan cmd="migrate")
	docker-compose exec app php artisan $(cmd)

migrate: ## Run database migrations
	docker-compose exec app php artisan migrate

migrate-fresh: ## Fresh migration with seeders
	docker-compose exec app php artisan migrate:fresh --seed

seed: ## Run database seeders
	docker-compose exec app php artisan db:seed

key-generate: ## Generate application key
	docker-compose exec app php artisan key:generate

storage-link: ## Create storage symlink
	docker-compose exec app php artisan storage:link

cache-clear: ## Clear all caches
	docker-compose exec app php artisan cache:clear
	docker-compose exec app php artisan config:clear
	docker-compose exec app php artisan route:clear
	docker-compose exec app php artisan view:clear
	@echo "${GREEN}✓ All caches cleared${NC}"

horizon: ## Start Horizon
	docker-compose exec app php artisan horizon

horizon-pause: ## Pause Horizon
	docker-compose exec app php artisan horizon:pause

horizon-continue: ## Continue Horizon
	docker-compose exec app php artisan horizon:continue

horizon-terminate: ## Terminate Horizon
	docker-compose exec app php artisan horizon:terminate

# Testing
test: ## Run PHPUnit tests
	docker-compose exec app vendor/bin/phpunit

test-coverage: ## Run tests with coverage
	docker-compose exec app vendor/bin/phpunit --coverage-html coverage

# Development Helpers
fresh: ## Fresh install (rebuild, migrate, seed)
	@make build
	@make up
	@sleep 5
	@make composer
	@make key-generate
	@make migrate-fresh
	@make storage-link
	@echo "${GREEN}✓ Fresh installation complete!${NC}"

debug: ## Start with debug services (PhpMyAdmin, Redis Commander, Mailhog)
	docker-compose --profile debug up -d
	@echo "${GREEN}✓ Debug services started${NC}"
	@echo "PhpMyAdmin: http://localhost:8080"
	@echo "Redis Commander: http://localhost:8081"
	@echo "Mailhog: http://localhost:8025"

# Maintenance
clean: ## Clean up containers, volumes, and images
	docker-compose down -v
	docker system prune -f
	@echo "${GREEN}✓ Cleanup complete${NC}"

clean-all: ## Deep clean (removes all data!)
	docker-compose down -v --remove-orphans
	docker system prune -af --volumes
	@echo "${RED}⚠ All Docker data has been removed${NC}"

status: ## Show container status
	docker-compose ps

# Production Commands
prod-build: ## Build for production
	docker-compose -f docker-compose.yml -f docker-compose.prod.yml build

prod-up: ## Start production containers
	docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

prod-down: ## Stop production containers
	docker-compose -f docker-compose.yml -f docker-compose.prod.yml down

# Backup & Restore
backup-db: ## Backup MySQL database
	@mkdir -p backups
	docker-compose exec mysql mysqldump -u root -p${DB_ROOT_PASSWORD} ${DB_DATABASE} > backups/backup_$$(date +%Y%m%d_%H%M%S).sql
	@echo "${GREEN}✓ Database backed up to backups/ directory${NC}"

restore-db: ## Restore MySQL database (usage: make restore-db file=backup.sql)
	docker-compose exec -T mysql mysql -u root -p${DB_ROOT_PASSWORD} ${DB_DATABASE} < $(file)
	@echo "${GREEN}✓ Database restored from $(file)${NC}"

# Environment Setup
env-setup: ## Copy .env.docker to .env
	@if [ ! -f .env ]; then \
		cp .env.docker .env; \
		echo "${GREEN}✓ .env file created from .env.docker${NC}"; \
		echo "${YELLOW}Please edit .env and set your configuration${NC}"; \
	else \
		echo "${YELLOW}.env file already exists${NC}"; \
	fi