# OVPN Admin Development Makefile
# Provides convenient commands for Docker development

.PHONY: help build up down restart logs shell db-shell install clean backup restore test

# Default target
help: ## Show this help message
	@echo "OVPN Admin Development Commands"
	@echo "==============================="
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'

install: ## Install and setup the development environment
	@echo "Setting up OVPN Admin development environment..."
	@if [ ! -f .env ]; then cp .env.example .env; echo "Created .env file"; fi
	@mkdir -p storage/logs storage/cache storage/sessions uploads
	@docker-compose build
	@docker-compose up -d
	@echo "Waiting for services to start..."
	@sleep 15
	@echo "✅ Setup complete!"
	@echo "🌐 Application: http://localhost:8080"
	@echo "🗄️  phpMyAdmin: http://localhost:8081"

build: ## Build Docker containers
	docker-compose build --no-cache

up: ## Start all services
	docker-compose up -d

down: ## Stop all services
	docker-compose down

restart: ## Restart all services
	docker-compose restart

restart-app: ## Restart only the application service
	docker-compose restart app

logs: ## View logs from all services
	docker-compose logs -f

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

logs-db: ## View database logs
	docker-compose logs -f db

shell: ## Access application container shell
	docker-compose exec app bash

db-shell: ## Access database shell
	docker-compose exec db mysql -u ovpnadmin -p ovpn_admin

status: ## Show container status
	docker-compose ps

clean: ## Remove all containers and volumes
	docker-compose down -v
	docker system prune -f

rebuild: ## Clean rebuild of all containers
	@make clean
	@make build
	@make up

backup: ## Backup database
	@echo "Creating database backup..."
	@docker-compose exec -T db mysqldump -u ovpnadmin -povpnadmin123 ovpn_admin > backup_$$(date +%Y%m%d_%H%M%S).sql
	@echo "✅ Database backed up to backup_$$(date +%Y%m%d_%H%M%S).sql"

restore: ## Restore database from backup file (usage: make restore FILE=backup.sql)
	@if [ -z "$(FILE)" ]; then echo "❌ Please specify backup file: make restore FILE=backup.sql"; exit 1; fi
	@echo "Restoring database from $(FILE)..."
	@docker-compose exec -T db mysql -u ovpnadmin -povpnadmin123 ovpn_admin < $(FILE)
	@echo "✅ Database restored from $(FILE)"

test-connection: ## Test database connection
	@echo "Testing database connection..."
	@docker-compose exec app php -r "try { \$$pdo = new PDO('mysql:host=db;dbname=ovpn_admin', 'ovpnadmin', 'ovpnadmin123'); echo '✅ Database connection successful!\n'; } catch (Exception \$$e) { echo '❌ Database connection failed: ' . \$$e->getMessage() . '\n'; }"

composer-install: ## Install PHP dependencies
	docker-compose exec app composer install

composer-update: ## Update PHP dependencies
	docker-compose exec app composer update

permissions: ## Fix file permissions
	@echo "Fixing file permissions..."
	@docker-compose exec app chown -R www-data:www-data /var/www/html
	@docker-compose exec app chmod -R 755 /var/www/html
	@docker-compose exec app chmod -R 777 storage/
	@echo "✅ Permissions fixed"

dev-setup: ## Setup development environment with additional tools
	@if [ ! -f docker-compose.override.yml ]; then cp docker-compose.override.yml.example docker-compose.override.yml; echo "Created development override file"; fi
	@make install

production-build: ## Build for production (no dev dependencies)
	docker-compose -f docker-compose.yml -f docker-compose.prod.yml build

# Database operations
db-reset: ## Reset database (WARNING: This will delete all data!)
	@echo "⚠️  WARNING: This will delete all database data!"
	@read -p "Are you sure? (y/N): " confirm && [ "$$confirm" = "y" ] || exit 1
	@docker-compose exec db mysql -u root -prootpassword -e "DROP DATABASE IF EXISTS ovpn_admin; CREATE DATABASE ovpn_admin;"
	@docker-compose exec -T db mysql -u root -prootpassword ovpn_admin < docker/mysql/init/01-init.sql
	@echo "✅ Database reset complete"

# Monitoring and debugging
monitor: ## Monitor container resources
	docker stats

inspect-app: ## Inspect application container
	docker-compose exec app php -m

inspect-db: ## Show database information
	docker-compose exec db mysql -u root -prootpassword -e "SHOW DATABASES; USE ovpn_admin; SHOW TABLES;"

# Update commands
update: ## Update application from git and rebuild
	@echo "Updating OVPN Admin..."
	@git pull origin main
	@make rebuild
	@echo "✅ Update complete"

# Quick development commands
dev: ## Quick start for development (alias for install)
	@make install

stop: ## Stop all services (alias for down)
	@make down

start: ## Start all services (alias for up)
	@make up