#!/bin/bash
# BreakPilot Compliance SDK - Mac Mini Setup Script
# Hardware: Mac Mini M4 Pro, 64GB RAM

set -e

echo "=========================================="
echo "BreakPilot Compliance SDK - Mac Mini Setup"
echo "=========================================="

# Check prerequisites
check_prerequisites() {
    echo "Checking prerequisites..."

    # Check Docker
    if ! command -v docker &> /dev/null; then
        echo "Error: Docker is not installed"
        echo "Please install Docker Desktop for Mac from https://www.docker.com/products/docker-desktop"
        exit 1
    fi

    # Check Ollama
    if ! command -v ollama &> /dev/null; then
        echo "Installing Ollama..."
        curl -fsSL https://ollama.com/install.sh | sh
    fi

    echo "Prerequisites OK"
}

# Configure Docker resources
configure_docker() {
    echo "Configuring Docker resources..."

    # Docker Desktop settings recommendation
    echo ""
    echo "Please ensure Docker Desktop is configured with:"
    echo "  - Memory: 32 GB (minimum)"
    echo "  - CPUs: 10 (recommended)"
    echo "  - Disk: 100 GB (minimum)"
    echo ""
    echo "You can configure this in Docker Desktop > Settings > Resources"
    echo ""
    read -p "Press Enter when Docker is configured..."
}

# Install LLM models
install_models() {
    echo "Installing LLM models..."

    # Pull embedding model
    echo "Pulling embedding model (bge-m3)..."
    ollama pull bge-m3

    # Pull main LLM
    echo "Pulling Qwen 2.5 32B (this may take a while)..."
    ollama pull qwen2.5:32b

    echo "Models installed successfully"
}

# Create environment file
create_env_file() {
    echo "Creating environment file..."

    if [ -f .env ]; then
        echo ".env file already exists, skipping..."
        return
    fi

    # Generate random secrets
    JWT_SECRET=$(openssl rand -hex 32)
    DB_PASSWORD=$(openssl rand -hex 16)
    MINIO_SECRET=$(openssl rand -hex 16)

    cat > .env << EOF
# BreakPilot Compliance SDK - Environment Configuration
# Generated on $(date)

# Database
DB_PASSWORD=${DB_PASSWORD}

# JWT
JWT_SECRET=${JWT_SECRET}

# MinIO
MINIO_ACCESS_KEY=breakpilot
MINIO_SECRET_KEY=${MINIO_SECRET}

# Maintenance (optional)
MAINTENANCE_API_KEY=
DEVICE_ID=mac-mini-$(hostname | tr '[:upper:]' '[:lower:]')
EOF

    echo ".env file created"
    echo "IMPORTANT: Keep this file secure and back it up!"
}

# Start services
start_services() {
    echo "Starting services..."

    docker compose up -d

    echo "Waiting for services to be ready..."
    sleep 10

    # Check health
    echo "Checking service health..."

    if curl -s http://localhost:80/health | grep -q "healthy"; then
        echo "API Gateway: OK"
    else
        echo "API Gateway: Not ready yet (this is normal during first start)"
    fi
}

# Print summary
print_summary() {
    echo ""
    echo "=========================================="
    echo "Setup Complete!"
    echo "=========================================="
    echo ""
    echo "Services:"
    echo "  API Gateway:     https://localhost (or http://localhost:80)"
    echo "  PostgreSQL:      localhost:5432"
    echo "  Redis:           localhost:6379"
    echo "  Qdrant:          localhost:6333"
    echo "  MinIO Console:   http://localhost:9001"
    echo ""
    echo "LLM Models (via Ollama on host):"
    echo "  Embedding: bge-m3"
    echo "  Chat:      qwen2.5:32b"
    echo ""
    echo "Commands:"
    echo "  Start:   docker compose up -d"
    echo "  Stop:    docker compose down"
    echo "  Logs:    docker compose logs -f"
    echo "  Status:  docker compose ps"
    echo ""
    echo "Next steps:"
    echo "  1. Configure your client with API endpoint: http://$(hostname):80/api/v1"
    echo "  2. Generate an API key from the admin dashboard"
    echo "  3. Start integrating the SDK in your application"
    echo ""
}

# Main
main() {
    check_prerequisites
    configure_docker
    install_models
    create_env_file
    start_services
    print_summary
}

main "$@"
