<?php
/**
 * INSTALADOR DO mPDF VIA COMPOSER
 * ─────────────────────────────────────────────────────────────
 * COMO USAR:
 * 1. Faça upload deste arquivo para a pasta RAIZ do seu sistema:
 *    public_html/brenopaiva.com.br/sistema/instalar_mpdf.php
 * 2. Acesse no navegador:
 *    https://sistema.brenopaiva.com.br/instalar_mpdf.php
 * 3. Aguarde a instalação (pode demorar 1-2 minutos)
 * 4. APAGUE este arquivo após a instalação bem-sucedida!
 *
 * ⚠️  SEGURANÇA: Este script tem acesso de escrita ao servidor.
 *     NUNCA deixe ele no servidor após terminar.
 * ─────────────────────────────────────────────────────────────
 */

// Aumenta o tempo de execução para o download não dar timeout
set_time_limit(300);
ini_set('memory_limit', '256M');

$base = __DIR__;
$vendor_dir = $base . '/vendor';
$composer_json = $base . '/composer.json';
$composer_phar = $base . '/composer.phar';

echo '<!DOCTYPE html><html><head><meta charset="UTF-8">
<title>Instalador mPDF</title>
<style>
body{font-family:monospace;background:#1a1a2e;color:#e0e0e0;padding:20px;max-width:800px;margin:0 auto}
h1{color:#4a9fd4}
.ok{color:#2ecc71}.err{color:#e74c3c}.warn{color:#f39c12}.info{color:#3498db}
pre{background:#0d0d1a;padding:15px;border-radius:8px;overflow-x:auto;white-space:pre-wrap}
.box{background:#16213e;border:1px solid #4a9fd4;border-radius:8px;padding:15px;margin:10px 0}
</style></head><body>';

echo '<h1>🚀 Instalador do mPDF — Breno Paiva Advocacia</h1>';
echo '<div class="box">';

// ── Passo 1: Criar composer.json ───────────────────────────────
echo '<p><strong>Passo 1:</strong> Criando composer.json...</p>';
if (!file_exists($composer_json)) {
    $json = json_encode([
        'require' => [
            'mpdf/mpdf' => '^8.2'
        ],
        'config' => [
            'optimize-autoloader' => true,
            'sort-packages' => true
        ]
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
    file_put_contents($composer_json, $json);
    echo '<p class="ok">✓ composer.json criado</p>';
} else {
    // Verifica se já tem mPDF no composer.json existente
    $existing = json_decode(file_get_contents($composer_json), true);
    if (empty($existing['require']['mpdf/mpdf'])) {
        $existing['require']['mpdf/mpdf'] = '^8.2';
        file_put_contents($composer_json, json_encode($existing, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
        echo '<p class="ok">✓ mpdf/mpdf adicionado ao composer.json existente</p>';
    } else {
        echo '<p class="warn">⚠ composer.json já possui mPDF: ' . $existing['require']['mpdf/mpdf'] . '</p>';
    }
}

// ── Passo 2: Baixar o Composer Phar ───────────────────────────
echo '<p><strong>Passo 2:</strong> Baixando Composer...</p>';
if (!file_exists($composer_phar)) {
    $phar_url = 'https://getcomposer.org/composer-stable.phar';
    $phar_data = @file_get_contents($phar_url);
    if ($phar_data === false) {
        // Tenta com cURL
        $ch = curl_init($phar_url);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_TIMEOUT => 120,
            CURLOPT_USERAGENT => 'Composer-Installer',
        ]);
        $phar_data = curl_exec($ch);
        $curl_error = curl_error($ch);
        curl_close($ch);
        if (!$phar_data) {
            echo '<p class="err">✗ Erro ao baixar Composer: ' . htmlspecialchars($curl_error) . '</p>';
            echo '</div></body></html>';
            exit;
        }
    }
    file_put_contents($composer_phar, $phar_data);
    chmod($composer_phar, 0755);
    echo '<p class="ok">✓ Composer baixado (' . round(filesize($composer_phar)/1024) . ' KB)</p>';
} else {
    echo '<p class="warn">⚠ composer.phar já existe, reaproveitando</p>';
}

// ── Passo 3: Executar composer require ─────────────────────────
echo '<p><strong>Passo 3:</strong> Instalando mPDF (pode demorar 1-2 min)...</p>';
echo '<pre>';
flush();

$php_bin = PHP_BINARY;
$cmd = escapeshellcmd($php_bin) . ' ' .
       escapeshellarg($composer_phar) . ' require mpdf/mpdf ' .
       '--no-interaction --no-progress --optimize-autoloader ' .
       '--working-dir=' . escapeshellarg($base) . ' 2>&1';

$output = shell_exec($cmd);

if ($output === null) {
    // shell_exec desabilitado — tenta via proc_open
    $descriptors = [0=>['pipe','r'], 1=>['pipe','w'], 2=>['pipe','w']];
    $proc = proc_open($cmd, $descriptors, $pipes, $base);
    if ($proc) {
        fclose($pipes[0]);
        $output = stream_get_contents($pipes[1]) . stream_get_contents($pipes[2]);
        fclose($pipes[1]); fclose($pipes[2]);
        proc_close($proc);
    } else {
        $output = 'ERRO: Não foi possível executar o Composer. shell_exec e proc_open estão desabilitados neste servidor.';
    }
}

echo htmlspecialchars($output);
echo '</pre>';

// ── Passo 4: Verificar instalação ─────────────────────────────
echo '<p><strong>Passo 4:</strong> Verificando instalação...</p>';
$autoload = $vendor_dir . '/autoload.php';
$mpdf_dir = $vendor_dir . '/mpdf/mpdf';

if (file_exists($autoload) && is_dir($mpdf_dir)) {
    echo '<p class="ok" style="font-size:18px">✓ <strong>mPDF instalado com sucesso!</strong></p>';
    echo '<p class="ok">✓ ' . $vendor_dir . '/autoload.php encontrado</p>';
    echo '<p class="ok">✓ ' . $mpdf_dir . ' encontrado</p>';

    // Passo 5: Copiar vendor para application/third_party (mais seguro no CI2)
    $target = $base . '/application/third_party/mpdf_vendor';
    if (!is_dir($target)) {
        echo '<p><strong>Passo 5:</strong> Copiando vendor para application/third_party/mpdf_vendor...</p>';
        // Cria link simbólico ou copia
        if (@symlink($vendor_dir, $target)) {
            echo '<p class="ok">✓ Link simbólico criado</p>';
        } else {
            echo '<p class="warn">⚠ Não foi possível criar link simbólico — o vendor está em: ' . $vendor_dir . '</p>';
            echo '<p class="info">ℹ O helper dompdf_helper.php que vamos instalar aponta para ' . $vendor_dir . ' diretamente — isso já está correto.</p>';
        }
    }

    echo '<div class="box" style="border-color:#2ecc71;margin-top:20px">';
    echo '<p class="ok"><strong>✅ PRÓXIMOS PASSOS:</strong></p>';
    echo '<ol>';
    echo '<li>Faça upload do novo <code>dompdf_helper.php</code> (incluído no pacote que vou te passar)</li>';
    echo '<li><strong>APAGUE este arquivo</strong> (<code>instalar_mpdf.php</code>) do servidor imediatamente!</li>';
    echo '<li>Teste a geração de PDF acessando uma fatura/recibo</li>';
    echo '</ol>';
    echo '</div>';

} else {
    echo '<p class="err">✗ Instalação parece ter falhado. Verifique a saída acima.</p>';
    echo '<p class="warn">Possíveis causas:</p>';
    echo '<ul>';
    echo '<li>shell_exec desabilitado no servidor (comum em cPanel compartilhado)</li>';
    echo '<li>Sem permissão de escrita na pasta</li>';
    echo '<li>PHP sem acesso à internet (curl/allow_url_fopen desabilitado)</li>';
    echo '</ul>';
    echo '<p class="info">Neste caso, a solução é instalar localmente e fazer upload da pasta vendor/. Me avise.</p>';
}

echo '</div></body></html>';
