#!/bin/bash

echo "=== AirwavePBX v1.0.3 Hotfix ==="
echo "Fixing child_process.promises issue..."

# Fix system.js
cat > /tmp/system-fix.patch << 'EOF'
--- a/backend/src/api/system.js
+++ b/backend/src/api/system.js
@@ -1,7 +1,10 @@
 const express = require('express');
 const { body, query, param, validationResult } = require('express-validator');
-const { exec, execFile } = require('child_process').promises;
+const { promisify } = require('util');
+const { exec: execCallback, execFile: execFileCallback } = require('child_process');
+const exec = promisify(execCallback);
+const execFile = promisify(execFileCallback);
 const fs = require('fs').promises;
 const path = require('path');
 const database = require('../models/database');
EOF

# Fix asterisk.js
cat > /tmp/asterisk-fix.patch << 'EOF'
--- a/backend/src/services/asterisk.js
+++ b/backend/src/services/asterisk.js
@@ -265,7 +265,9 @@
   async reloadAsterisk(module = null) {
     try {
       const command = module ? `asterisk -rx "module reload ${module}"` : 'asterisk -rx "core reload"';
-      const { exec } = require('child_process').promises;
+      const { promisify } = require('util');
+      const { exec: execCallback } = require('child_process');
+      const exec = promisify(execCallback);
       await exec(command);
       logger.info(`Asterisk ${module || 'core'} reloaded`);
       return true;
EOF

cd /opt/airwavepbx

# Apply patches
patch -p1 < /tmp/system-fix.patch
patch -p1 < /tmp/asterisk-fix.patch

echo "Patches applied. Restarting AirwavePBX..."
systemctl restart airwavepbx

echo "Waiting for service to start..."
sleep 5

echo "Checking service status..."
systemctl status airwavepbx --no-pager

echo
echo "Testing if service is listening on port 3000..."
netstat -tlnp | grep :3000

echo
echo "Hotfix complete! Check https://phone.itsyourradio.com"