#!/bin/bash

echo "=== Manual Fix for AirwavePBX v1.0.5 ==="

# First, let's check what's wrong with the service
echo "Checking service logs..."
journalctl -u airwavepbx -n 20 --no-pager

# Initialize database manually
echo -e "\n=== Initializing Database Manually ==="

# First ensure database directory exists
sudo mkdir -p /var/lib/airwavepbx/data
sudo chown airwavepbx:airwavepbx /var/lib/airwavepbx/data

# Create a simple init script that uses the installed bcryptjs
cat > /tmp/init-db.js << 'EOF'
const path = require('path');
const bcrypt = require(path.join(__dirname, 'backend/node_modules/bcryptjs'));
const Database = require('better-sqlite3');

const dbPath = '/var/lib/airwavepbx/data/airwavepbx.db';
const db = new Database(dbPath);

// Create tables
db.exec(`
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username TEXT UNIQUE NOT NULL,
        email TEXT UNIQUE NOT NULL,
        password TEXT NOT NULL,
        role TEXT DEFAULT 'user',
        created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
        updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
    );

    CREATE TABLE IF NOT EXISTS extensions (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        extension TEXT UNIQUE NOT NULL,
        name TEXT NOT NULL,
        secret TEXT NOT NULL,
        context TEXT DEFAULT 'internal',
        mailbox TEXT,
        user_id INTEGER,
        created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
        updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
        FOREIGN KEY (user_id) REFERENCES users(id)
    );

    CREATE TABLE IF NOT EXISTS call_logs (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        uniqueid TEXT UNIQUE,
        src TEXT,
        dst TEXT,
        calldate DATETIME,
        duration INTEGER,
        billsec INTEGER,
        disposition TEXT,
        user_id INTEGER,
        created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
        FOREIGN KEY (user_id) REFERENCES users(id)
    );

    CREATE TABLE IF NOT EXISTS settings (
        key TEXT PRIMARY KEY,
        value TEXT,
        updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
    );
`);

async function init() {
    try {
        // Check if admin exists
        const userCount = db.prepare('SELECT COUNT(*) as count FROM users').get().count;
        
        if (userCount === 0) {
            console.log('Creating admin user...');
            const password = process.env.ADMIN_PASSWORD || 'changeme';
            const hashedPassword = await bcrypt.hash(password, 10);
            
            db.prepare(`
                INSERT INTO users (username, email, password, role)
                VALUES (?, ?, ?, ?)
            `).run('admin', 'admin@localhost', hashedPassword, 'admin');
            
            console.log('Admin user created successfully');
            console.log('Username: admin');
            console.log('Password:', password);
        }
        
        // Create sample extensions
        const extensions = [
            { extension: '1001', name: 'Reception' },
            { extension: '1002', name: 'Sales' },
            { extension: '1003', name: 'Support' }
        ];
        
        extensions.forEach(ext => {
            const secret = Math.random().toString(36).substring(2, 18);
            try {
                db.prepare(`
                    INSERT INTO extensions (extension, name, secret, context, mailbox)
                    VALUES (?, ?, ?, ?, ?)
                `).run(ext.extension, ext.name, secret, 'internal', ext.extension);
                console.log(`Created extension ${ext.extension}`);
            } catch (e) {
                // Extension might already exist
            }
        });
        
        console.log('Database initialized successfully');
        db.close();
        
    } catch (error) {
        console.error('Error:', error);
        process.exit(1);
    }
}

init();
EOF

# Run the init script
cd /opt/airwavepbx
source /etc/airwavepbx/config.env
sudo -u airwavepbx HOME=/home/airwavepbx ADMIN_PASSWORD="$INITIAL_ADMIN_PASSWORD" node /tmp/init-db.js

# Set proper permissions
sudo chown -R airwavepbx:airwavepbx /var/lib/airwavepbx
sudo chmod -R 755 /var/lib/airwavepbx

# Create Asterisk configs if missing
echo -e "\n=== Creating Asterisk Configs ==="
sudo touch /etc/asterisk/sip_airwave.conf
sudo touch /etc/asterisk/extensions_airwave.conf
sudo chown asterisk:asterisk /etc/asterisk/*.conf
sudo chmod 664 /etc/asterisk/*_airwave.conf

# Include in main configs if not already
if ! grep -q "#include sip_airwave.conf" /etc/asterisk/sip.conf 2>/dev/null; then
    echo "#include sip_airwave.conf" | sudo tee -a /etc/asterisk/sip.conf
fi

if ! grep -q "#include extensions_airwave.conf" /etc/asterisk/extensions.conf 2>/dev/null; then
    echo "#include extensions_airwave.conf" | sudo tee -a /etc/asterisk/extensions.conf
fi

# Restart services
echo -e "\n=== Restarting Services ==="
sudo systemctl restart asterisk
sleep 5
sudo systemctl restart airwavepbx

# Wait and check
sleep 10

echo -e "\n=== Service Status ==="
if systemctl is-active --quiet airwavepbx; then
    echo "✓ AirwavePBX is running!"
    echo ""
    echo "Access your system at: https://$DOMAIN"
    echo "Username: admin"
    echo "Password: $INITIAL_ADMIN_PASSWORD"
else
    echo "✗ Service still not running. Checking logs..."
    journalctl -u airwavepbx -n 30 --no-pager
fi