#!/bin/bash

# ROOT_PATH Configuration Demo Script
# This script demonstrates how ROOT_PATH affects path resolution

set -e

echo "🚀 ROOT_PATH Configuration Demo"
echo "================================"
echo

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Function to print colored output
print_info() {
    echo -e "${BLUE}ℹ️  $1${NC}"
}

print_success() {
    echo -e "${GREEN}✅ $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠️  $1${NC}"
}

print_error() {
    echo -e "${RED}❌ $1${NC}"
}

# Check if we're in the right directory
if [ ! -f "config.toml" ]; then
    print_error "Please run this script from the project root directory (where config.toml is located)"
    exit 1
fi

# Build the project first
print_info "Building the project..."
cd server
cargo build --release --quiet
cd ..

print_success "Project built successfully!"
echo

# Demo 1: Default behavior (current directory)
print_info "Demo 1: Default ROOT_PATH behavior"
echo "Current directory: $(pwd)"
echo "Running: cargo run --bin config_tool -- show"
cd server
cargo run --release --bin config_tool -- show 2>/dev/null | grep -E "(Assets|Public|Logs|Site)" | head -4
cd ..
echo

# Demo 2: Custom ROOT_PATH
print_info "Demo 2: Custom ROOT_PATH"
DEMO_PATH="/tmp/rustelo-demo"
mkdir -p "$DEMO_PATH"
echo "Created demo directory: $DEMO_PATH"
echo "Running: ROOT_PATH=$DEMO_PATH cargo run --bin config_tool -- show"
cd server
ROOT_PATH="$DEMO_PATH" cargo run --release --bin config_tool -- show 2>/dev/null | grep -E "(Assets|Public|Logs|Site)" | head -4
cd ..
echo

# Demo 3: Show path resolution in action
print_info "Demo 3: Path resolution comparison"
echo "Default (relative paths):"
cd server
cargo run --release --bin config_tool -- show 2>/dev/null | grep -E "Assets Dir:|Public Dir:" | sed 's/^/  /'
echo
echo "With ROOT_PATH=/opt/myapp (absolute paths):"
ROOT_PATH="/opt/myapp" cargo run --release --bin config_tool -- show 2>/dev/null | grep -E "Assets Dir:|Public Dir:" | sed 's/^/  /' 2>/dev/null || echo "  (Note: /opt/myapp doesn't exist, so validation would fail)"
cd ..
echo

# Demo 4: Environment variable combinations
print_info "Demo 4: Environment variable combinations"
echo "You can combine ROOT_PATH with other environment variables:"
echo
echo "Example commands:"
echo "  ROOT_PATH=/app ENVIRONMENT=production ./target/release/server"
echo "  ROOT_PATH=/var/www/myapp SERVER_PORT=8080 ./target/release/server"
echo "  ROOT_PATH=/opt/myapp DATABASE_URL=postgresql://... ./target/release/server"
echo

# Demo 5: Docker example
print_info "Demo 5: Docker deployment example"
echo "In a Docker container, you might use:"
echo
cat << 'EOF'
# Dockerfile
FROM rust:latest
WORKDIR /app
COPY . .
ENV ROOT_PATH=/app
ENV ENVIRONMENT=production
ENV SERVER_PORT=3030
RUN cargo build --release
EXPOSE 3030
CMD ["./target/release/server"]
EOF
echo

# Demo 6: Configuration file examples
print_info "Demo 6: Configuration file setup"
echo "Your config.toml should contain:"
echo
echo "root_path = \".\"  # Default to current directory"
echo "# or"
echo "root_path = \"/app\"  # Absolute path for production"
echo
echo "All relative paths in the config will be resolved against this root_path:"
echo "  public_dir = \"public\"         # becomes /app/public"
echo "  logs_dir = \"logs\"             # becomes /app/logs"
echo "  uploads_dir = \"uploads\"       # becomes /app/uploads"
echo

# Demo 7: Validation
print_info "Demo 7: Path validation"
echo "The system validates that ROOT_PATH exists:"
ROOT_PATH="/nonexistent/path" cargo run --release --bin config_tool -- show 2>&1 | grep -E "(Failed to load|Root path)" | head -1 || true
echo

# Clean up
rm -rf "$DEMO_PATH"
print_success "Demo completed!"
echo
print_info "Key takeaways:"
echo "  1. ROOT_PATH sets the base directory for all relative paths"
echo "  2. Use environment variables to override configuration"
echo "  3. Absolute paths are preserved as-is"
echo "  4. Path validation ensures directories exist"
echo "  5. Perfect for containerized deployments"
echo
print_info "For more details, see: docs/ROOT_PATH_CONFIG.md"
