#!/bin/bash
# Fix Puppeteer and Chromium setup for Ubuntu server

echo "=== Fixing Puppeteer Setup ==="

# Install Chromium via apt instead of snap for better compatibility
echo "Removing Snap Chromium..."
sudo snap remove chromium

echo "Installing Chromium via apt..."
sudo apt update
sudo apt install -y chromium-browser

# Verify installation
if command -v chromium-browser &> /dev/null; then
    echo "✓ Chromium installed via apt"
    chromium-browser --version
else
    echo "Installing Google Chrome instead..."
    wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
    echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
    sudo apt update
    sudo apt install -y google-chrome-stable

    if command -v google-chrome &> /dev/null; then
        echo "✓ Google Chrome installed"
        google-chrome --version
    fi
fi

# Fix Node.js module resolution
echo "Fixing Node.js/Puppeteer setup..."
cd /var/www/apper/admin.apper

# Reinstall puppeteer-core properly
npm uninstall puppeteer-core
npm install puppeteer-core --save

# Create a simple test
cat > test_chromium.js << 'EOF'
import puppeteer from 'puppeteer-core';
import { execSync } from 'child_process';

async function testChromium() {
    try {
        // Find Chromium
        let executablePath;
        const paths = [
            '/usr/bin/chromium-browser',
            '/usr/bin/google-chrome',
            '/usr/bin/google-chrome-stable'
        ];

        for (const path of paths) {
            try {
                execSync(`test -x ${path}`, { stdio: 'ignore' });
                executablePath = path;
                console.log(`Found browser at: ${path}`);
                break;
            } catch {
                continue;
            }
        }

        if (!executablePath) {
            throw new Error('No suitable browser found');
        }

        console.log('Launching browser...');
        const browser = await puppeteer.launch({
            executablePath: executablePath,
            headless: true,
            args: [
                '--no-sandbox',
                '--disable-setuid-sandbox',
                '--disable-dev-shm-usage',
                '--disable-gpu'
            ]
        });

        console.log('✓ Browser launched successfully!');
        console.log('Version:', await browser.version());

        // Test navigation
        const page = await browser.newPage();
        await page.goto('https://httpbin.org/user-agent', { waitUntil: 'networkidle0' });
        const userAgent = await page.evaluate(() => navigator.userAgent);
        console.log('User-Agent:', userAgent);

        await browser.close();
        console.log('✓ Test completed successfully!');

    } catch (error) {
        console.error('✗ Error:', error.message);
        process.exit(1);
    }
}

testChromium();
EOF

echo "Running Chromium test..."
node test_chromium.js

if [ $? -eq 0 ]; then
    echo "🎉 Setup successful! Puppeteer is ready to use."
else
    echo "❌ Setup failed. Please check the error messages above."
fi
