#!/bin/bash

# RARN Full-Stack Project Setup Example
# Demonstrates setting up a complete project with RARN v1.1.0

echo "=== Full-Stack Project Setup with RARN ==="
echo ""

# Create project directory
PROJECT_NAME="fullstack-app"
echo "1. Creating project directory: $PROJECT_NAME"
mkdir -p $PROJECT_NAME
cd $PROJECT_NAME

# Initialize project
echo "2. Initializing RARN project..."
rarn init -y

# Create environment
echo "3. Creating environment with JavaScript and Python..."
rarn env create $PROJECT_NAME --language javascript python

# Show activation
echo "4. Activating environment..."
echo "Run: eval \"\$(rarn env activate $PROJECT_NAME --print)\""
echo ""

# Create package.json for the project
echo "5. Creating package.json..."
cat > package.json << 'EOF'
{
  "name": "fullstack-app",
  "version": "1.0.0",
  "description": "Full-stack application with RARN",
  "scripts": {
    "dev": "concurrently \"npm run server\" \"npm run client\"",
    "server": "cd backend && nodemon server.js",
    "client": "cd frontend && npm start",
    "test": "jest"
  },
  "dependencies": {
    "express": "^4.18.0",
    "cors": "^2.8.5",
    "dotenv": "^16.0.0",
    "python:flask": "^3.0.0",
    "python:flask-cors": "^4.0.0"
  },
  "devDependencies": {
    "nodemon": "^3.0.0",
    "concurrently": "^8.0.0",
    "jest": "^29.0.0",
    "python:pytest": "^7.0.0"
  }
}
EOF

# Create project structure
echo "6. Creating project structure..."
mkdir -p backend frontend data scripts

# Backend setup
cat > backend/server.js << 'EOF'
const express = require('express');
const cors = require('cors');

const app = express();
app.use(cors());
app.use(express.json());

app.get('/api/hello', (req, res) => {
  res.json({ message: 'Hello from RARN environment!' });
});

const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});
EOF

# Python API
cat > backend/ml_api.py << 'EOF'
from flask import Flask, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route('/api/ml/predict', methods=['POST'])
def predict():
    # ML prediction logic here
    return jsonify({'prediction': 'result'})

if __name__ == '__main__':
    app.run(port=5001)
EOF

# Frontend setup
mkdir -p frontend/src
cat > frontend/package.json << 'EOF'
{
  "name": "frontend",
  "version": "1.0.0",
  "dependencies": {
    "react": "^18.0.0",
    "react-dom": "^18.0.0",
    "axios": "^1.0.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build"
  }
}
EOF

# Python script example
cat > scripts/data_processor.py << 'EOF'
#!/usr/bin/env python
import requests
import json

def process_data():
    """Process data using packages from RARN environment"""
    print("Processing data with RARN Python environment...")
    # Your data processing logic here

if __name__ == "__main__":
    process_data()
EOF

# Create README
cat > README.md << 'EOF'
# Full-Stack App with RARN

This project demonstrates RARN v1.1.0 environment management.

## Setup

1. Create and activate environment:
   ```bash
   rarn env create fullstack-app --language javascript python
   eval "$(rarn env activate fullstack-app --print)"
   ```

2. Install dependencies:
   ```bash
   rarn install
   ```

3. Run development servers:
   ```bash
   rarn run dev
   ```

## Project Structure

- `backend/` - Node.js Express server + Python Flask API
- `frontend/` - React application  
- `scripts/` - Python data processing scripts
- `data/` - Data files

## Features

- Isolated environment with RARN
- JavaScript and Python in same project
- All dependencies managed by RARN
- Shell integration for easy activation
EOF

echo ""
echo "=== Setup Complete ==="
echo ""
echo "To use this project:"
echo "1. cd $PROJECT_NAME"
echo "2. eval \"\$(rarn env activate $PROJECT_NAME --print)\""
echo "3. rarn install"
echo "4. Start developing!"
echo ""
echo "The environment includes:"
echo "- Isolated node_modules for JavaScript packages"
echo "- Python virtual environment for Python packages"
echo "- Shell prompt showing active environment"
echo "- All tools working together seamlessly"