#!/bin/bash

# Trainings24x7 Cybersecurity Platform - One-Click Installation Script
# ============================================================

set -e

echo "🚀 Starting Trainings24x7 Platform Installation..."
echo "============================================"

# Function to print colored output
print_status() {
    echo -e "\033[1;32m[INFO]\033[0m $1"
}

print_error() {
    echo -e "\033[1;31m[ERROR]\033[0m $1"
}

print_warning() {
    echo -e "\033[1;33m[WARNING]\033[0m $1"
}

# Check if running as root
if [ "$EUID" -ne 0 ]; then
    print_error "Please run as root or with sudo"
    exit 1
fi

# 1. Setup MongoDB
print_status "Setting up MongoDB..."
if ! pgrep mongod > /dev/null; then
    mkdir -p /data/db
    chmod 777 /data/db
    mongod --dbpath /data/db --bind_ip_all > /var/log/mongodb.log 2>&1 &
    sleep 3
    print_status "MongoDB started successfully"
else
    print_status "MongoDB is already running"
fi

# 2. Install Python Dependencies
print_status "Installing Python dependencies..."
cd /app/backend
pip install -r requirements.txt

# Fix bcrypt version if needed
pip install --force-reinstall bcrypt==4.1.3

# 3. Install Node.js Dependencies
print_status "Installing Node.js dependencies..."
cd /app/frontend
yarn install

# 4. Create Environment Files
print_status "Creating environment configuration..."
if [ ! -f "/app/backend/.env" ]; then
    cat > /app/backend/.env << EOF
MONGO_URL=mongodb://localhost:27017
DB_NAME=trainings24x7_db
SECRET_KEY=trainings24x7-secret-key-for-jwt-tokens-change-in-production
CORS_ORIGINS=http://localhost:3000,http://127.0.0.1:3000
EOF
    print_status "Backend .env created"
fi

if [ ! -f "/app/frontend/.env" ]; then
    cat > /app/frontend/.env << EOF
REACT_APP_BACKEND_URL=http://localhost:8001
EOF
    print_status "Frontend .env created"
fi

# 5. Setup Supervisor Configuration
print_status "Setting up service management..."
cat > /etc/supervisor/conf.d/backend.conf << EOF
[program:backend]
command=python -m uvicorn server:app --host 0.0.0.0 --port 8001 --reload
directory=/app/backend
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/backend.err.log
stdout_logfile=/var/log/supervisor/backend.out.log
user=root
environment=PATH="/root/.venv/bin:%(ENV_PATH)s"
EOF

cat > /etc/supervisor/conf.d/frontend.conf << EOF
[program:frontend]
command=yarn start
directory=/app/frontend
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/frontend.err.log
stdout_logfile=/var/log/supervisor/frontend.out.log
user=root
environment=BROWSER=none,CI=true
EOF

# 6. Start Services
print_status "Starting services..."
supervisorctl reread
supervisorctl update
supervisorctl restart all

# 7. Wait for services to start
print_status "Waiting for services to initialize..."
sleep 10

# 8. Test Backend API
print_status "Testing backend API..."
if curl -s http://localhost:8001/api/ | grep -q "running"; then
    print_status "Backend API is responding"
else
    print_error "Backend API is not responding"
    exit 1
fi

# 9. Test Frontend
print_status "Testing frontend..."
if curl -s -I http://localhost:3000 | grep -q "200 OK"; then
    print_status "Frontend is responding"
else
    print_error "Frontend is not responding"
    exit 1
fi

# 10. Create demo user (optional)
print_status "Creating demo user account..."
DEMO_RESPONSE=$(curl -s -X POST "http://localhost:8001/api/auth/register" \
  -H "Content-Type: application/json" \
  -d '{"username": "demo_user", "email": "demo@trainings24x7.com", "password": "demo123"}')

if echo "$DEMO_RESPONSE" | grep -q "access_token"; then
    print_status "Demo user created successfully"
    echo "📧 Demo Login: demo@trainings24x7.com"
    echo "🔑 Demo Password: demo123"
elif echo "$DEMO_RESPONSE" | grep -q "already registered"; then
    print_status "Demo user already exists"
    echo "📧 Demo Login: demo@trainings24x7.com"
    echo "🔑 Demo Password: demo123"
else
    print_warning "Could not create demo user, but you can register manually"
fi

echo ""
echo "🎉 Trainings24x7 Platform Installation Complete!"
echo "========================================"
echo ""
echo "📱 Frontend URL: http://localhost:3000"
echo "🔧 Backend API: http://localhost:8001/api/"
echo ""
echo "📧 Demo Login: demo@trainings24x7.com"
echo "🔑 Demo Password: demo123"
echo ""
echo "📋 Management Commands:"
echo "  Start:   ./start.sh"
echo "  Stop:    ./stop.sh" 
echo "  Status:  ./status.sh"
echo ""
print_status "Installation completed successfully! 🚀"