<?php
/**
 * Sonora — install_youtubedl.php
 * Instala youtube-dl (compatível com Python 3.6) como alternativa ao yt-dlp
 * ⚠️ APAGUE ESTE ARQUIVO APÓS A INSTALAÇÃO!
 */
set_time_limit(180);

echo "<!DOCTYPE html><html lang='pt-BR'><head><meta charset='UTF-8'><title>Instalação youtube-dl</title>
<style>
  body{font-family:monospace;background:#0a0a0f;color:#f0f0f8;padding:30px;line-height:1.9}
  .ok{color:#00e5a0}.err{color:#ff4d6d}.warn{color:#f7c16f}.mut{color:#6b6b85}
  pre{background:#16161f;border:1px solid #2a2a3a;border-radius:8px;padding:14px;overflow-x:auto;white-space:pre-wrap;word-break:break-all}
  h2{color:#00e5a0;font-family:sans-serif}h3{color:#7c6ff7;font-family:sans-serif;margin:18px 0 6px}
  .box{background:#16161f;border-left:3px solid #00e5a0;padding:12px 16px;margin:10px 0;border-radius:0 8px 8px 0}
  a{color:#00e5a0}
</style></head><body>";

echo "<h2>🎵 Sonora — Instalação youtube-dl (Python 3.6 compatível)</h2>";

$base    = __DIR__;
$python  = '/bin/python3.6';
$ytdl    = "$base/youtube-dl";   // script youtube-dl

// ── Verifica Python ───────────────────────────────────────────────────────────
$pyVer = trim(shell_exec("$python --version 2>&1") ?: '');
echo "<p>Python: <strong class='ok'>$pyVer</strong> em <code>$python</code></p>";

// ── Remove arquivos antigos de tentativas anteriores ──────────────────────────
foreach (["$base/yt-dlp", "$base/yt-dlp-run"] as $old) {
    if (file_exists($old)) {
        is_dir($old) ? shell_exec("rm -rf ".escapeshellarg($old)) : unlink($old);
    }
}
echo "<p class='mut'>Limpeza de arquivos antigos concluída.</p>";

// ── Baixa youtube-dl ──────────────────────────────────────────────────────────
// youtube-dl é mais antigo e suporta Python 2.6+ / Python 3.x
$urls = [
    'https://yt-dl.org/downloads/latest/youtube-dl',
    'https://github.com/ytdl-org/youtube-dl/releases/latest/download/youtube-dl',
];

$success = false;
foreach ($urls as $url) {
    echo "<p>⬇ Baixando youtube-dl de: <code>$url</code>...</p>"; flush();
    $ch = curl_init($url);
    curl_setopt_array($ch,[
        CURLOPT_FOLLOWLOCATION=>true, CURLOPT_RETURNTRANSFER=>true,
        CURLOPT_TIMEOUT=>90, CURLOPT_SSL_VERIFYPEER=>false,
        CURLOPT_USERAGENT=>'curl/7.68.0',
    ]);
    $data = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($code===200 && $data && strlen($data)>100000) {
        file_put_contents($ytdl, $data);
        chmod($ytdl, 0755);
        $mb = round(strlen($data)/1024/1024,1);
        echo "<p class='ok'>✅ Download: {$mb}MB</p>"; flush();
        $success = true;
        break;
    }
    echo "<p class='err'>❌ Falhou (HTTP $code). Tentando próxima...</p>";
}

if (!$success) {
    echo "<p class='err'>❌ Não foi possível baixar youtube-dl.</p>";
    goto fim_erro;
}

// ── Testa ─────────────────────────────────────────────────────────────────────
echo "<p>🔍 Testando...</p>"; flush();
$ver = trim(shell_exec("$python $ytdl --version 2>&1") ?: '');
echo "<pre>\$ $python $ytdl --version\n$ver</pre>"; flush();

$ok = $ver && strpos($ver,'Error')===false && strpos($ver,'Traceback')===false && strlen($ver)<20;

if ($ok) {
    echo "<p class='ok' style='font-size:18px'>✅ youtube-dl funcionando! Versão: $ver</p>";

    // ── Cria wrapper yt-dlp que aponta para youtube-dl ─────────────────────────
    // O api.php procura por "yt-dlp" — criamos um wrapper com esse nome
    $wrapper = "$base/yt-dlp-run";
    file_put_contents($wrapper, "#!/bin/bash\nexec $python $ytdl \"\$@\"\n");
    chmod($wrapper, 0755);
    echo "<p class='ok'>✅ Wrapper criado: yt-dlp-run</p>";

    // ── Atualiza api.php ───────────────────────────────────────────────────────
    echo "<h3>🔧 Atualizando api.php...</h3>"; flush();
    $apiFile = "$base/api.php";

    if (file_exists($apiFile)) {
        $api = file_get_contents($apiFile);

        // Substitui função getYtDlpPath por versão que usa youtube-dl
        $newFunc = <<<'PHPFUNC'
function getYtDlpPath() {
    $base = __DIR__;

    // 1. Wrapper bash (criado pela instalação)
    $w = $base . '/yt-dlp-run';
    if (file_exists($w) && is_executable($w)) return $w;

    // 2. youtube-dl com Python 3.6
    $ytdl = $base . '/youtube-dl';
    if (file_exists($ytdl)) {
        foreach (['/bin/python3.6','/bin/python3','/usr/bin/python3'] as $py) {
            if (!file_exists($py)) continue;
            $ver = trim(shell_exec("$py $ytdl --version 2>&1") ?: '');
            if ($ver && strlen($ver)<20 && strpos($ver,'Error')===false) {
                // Recria wrapper
                $wp = $base . '/yt-dlp-run';
                file_put_contents($wp, "#!/bin/bash\nexec $py $ytdl \"\$@\"\n");
                chmod($wp, 0755);
                return $wp;
            }
        }
    }

    // 3. yt-dlp no sistema
    foreach (['/usr/local/bin/yt-dlp','/usr/bin/yt-dlp',
              trim(shell_exec('which yt-dlp 2>/dev/null')??'')] as $p) {
        if ($p && is_executable($p)) return $p;
    }
    return null;
}
PHPFUNC;

        // Remove função antiga e insere nova
        $api = preg_replace('/function getYtDlpPath\(\)\s*\{[^}]+(?:\{[^}]*\}[^}]*)*\}/s', $newFunc, $api);

        if (file_put_contents($apiFile, $api)) {
            echo "<p class='ok'>✅ api.php atualizado com sucesso.</p>";
        } else {
            echo "<p class='err'>❌ Não foi possível escrever em api.php.</p>";
        }
    }

    // ── Também corrige getAudioUrlYtDlp para passar flag correta ──────────────
    $api = file_get_contents($apiFile);
    // youtube-dl usa mesma sintaxe do yt-dlp para -f e --get-url
    // Mas não tem --no-playlist em versões antigas — adiciona verificação
    if (strpos($api, 'youtube-dl') === false) {
        $api = str_replace(
            "' --no-check-certificate'",
            "' --no-check-certificate'",
            $api
        );
        file_put_contents($apiFile, $api);
    }

    // ── Testa extração de URL ──────────────────────────────────────────────────
    echo "<h3>🎵 Testando extração de URL...</h3>"; flush();
    $cmd = "$python $ytdl --no-check-certificate -f 'bestaudio/best' --get-url 'https://www.youtube.com/watch?v=jNQXAC9IVRw' 2>&1";
    echo "<pre class='mut'>\$ (testando...)</pre>"; flush();
    $out = trim(shell_exec($cmd) ?: '');

    if (strlen($out)>50 && strpos($out,'http')===0) {
        echo "<p class='ok'>✅ Extração de URL funcionando! O modo ÁUDIO vai ativar.</p>";
    } elseif (strpos($out,'429')!==false || strpos($out,'blocked')!==false || strpos($out,'Sign in')!==false) {
        echo "<p class='warn'>⚠ YouTube bloqueou o teste (normal em IP de servidor). Deve funcionar em produção.</p>";
    } else {
        echo "<pre>".htmlspecialchars($out)."</pre>";
        echo "<p class='warn'>⚠ Teste inconclusivo — youtube-dl está instalado mas a extração pode depender do IP.</p>";
    }

    echo "<br><div class='box'>
        <p class='ok'><strong>✅ Instalação concluída!</strong></p>
        <p>1. Acesse <a href='api.php?action=ping'>api.php?action=ping</a> — deve mostrar o caminho do yt-dlp-run</p>
        <p>2. Toque em qualquer música no player — o indicador deve mudar para <strong style='color:#00e5a0'>ÁUDIO</strong></p>
        <p class='err'>3. <strong>DELETE ESTE ARQUIVO: install_youtubedl.php</strong></p>
        <p class='mut'>Obs: delete também install_ytdlp.php e install_ytdlp_v2.php se ainda existirem.</p>
    </div>";

} else {
    fim_erro:
    echo "<br><p class='err'>❌ Nenhum método funcionou.</p>";

    echo "<h3>📋 Diagnóstico completo</h3>";
    $diag = [
        'shell_exec disponível'      => function_exists('shell_exec') ? '✅ Sim' : '❌ Não',
        'curl disponível'            => function_exists('curl_init')   ? '✅ Sim' : '❌ Não',
        'Python 3.6 existe'          => file_exists('/bin/python3.6')  ? '✅ Sim' : '❌ Não',
        'youtube-dl baixado'         => file_exists($ytdl)              ? '✅ Sim ('.filesize($ytdl).' bytes)' : '❌ Não',
        'Permissão escrita em '.$base=> is_writable($base)             ? '✅ Sim' : '❌ Não',
    ];
    echo "<pre>";
    foreach ($diag as $k=>$v) echo "$k: $v\n";
    echo "</pre>";

    echo "<div class='box' style='border-color:#ff4d6d'>
        <p class='warn'><strong>Situação:</strong> Sua hospedagem impede execução de scripts Python externos via PHP.</p>
        <p>O Sonora vai continuar funcionando no <strong>modo IFrame</strong> (indicador VÍDEO):</p>
        <ul style='margin:8px 0 0 20px;line-height:2'>
          <li>O áudio toca normalmente no player</li>
          <li>Para reprodução em segundo plano no celular, use o <strong>Wake Lock</strong> (🔒) + tela ligada</li>
          <li>Ou instale como PWA — comportamento muito próximo de um app nativo</li>
        </ul>
        <br>
        <p class='warn'><strong>Para trocar de hospedagem</strong>, procure por planos VPS ou hospedagens que permitam:</p>
        <ul style='margin:4px 0 0 20px;line-height:2'>
          <li>Python 3.10+ disponível</li>
          <li>Execução de scripts via <code>shell_exec</code></li>
          <li>Sem <code>noexec</code> nas partições de usuário</li>
        </ul>
    </div>";
}

echo "</body></html>";
