<?php
/**
 * Sonora — install_ytdlp_v2.php
 * Instala yt-dlp como módulo Python (compatível com Python 3.6)
 * ⚠️ APAGUE ESTE ARQUIVO APÓS A INSTALAÇÃO!
 */
set_time_limit(120);

echo "<!DOCTYPE html><html lang='pt-BR'><head><meta charset='UTF-8'><title>Instalação yt-dlp v2</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;margin-bottom:6px}
  h3{color:#7c6ff7;font-family:sans-serif;margin:20px 0 6px}
  .step{background:#16161f;border-left:3px solid #00e5a0;padding:10px 14px;margin:8px 0;border-radius:0 8px 8px 0}
  a{color:#00e5a0}
</style></head><body>";

echo "<h2>🎵 Sonora — Instalação yt-dlp (Modo Python)</h2>";

$base    = __DIR__;
$ytdlp   = "$base/yt-dlp";          // script Python wrapper
$ytmod   = "$base/yt_dlp_pkg";      // pasta do módulo

// ── Detecta Python ────────────────────────────────────────────────────────────
$pythons = ['python3.10','python3.11','python3.12','python3.9','python3.8','python3.7','python3.6','python3','python'];
$python  = null;
$pyVer   = '';

foreach ($pythons as $py) {
    $path = trim(shell_exec("which $py 2>/dev/null") ?: '');
    if (!$path) continue;
    $ver = trim(shell_exec("$path --version 2>&1") ?: '');
    if (strpos($ver, 'Python') !== false) {
        $python = $path;
        $pyVer  = $ver;
        break;
    }
}

echo "<p>Python detectado: <strong class='".($python?'ok':'err')."'>".($pyVer ?: 'NÃO ENCONTRADO')."</strong></p>";
echo "<p>Caminho: <code>".($python ?: '—')."</code></p>";

if (!$python) {
    echo "<p class='err'>❌ Python não encontrado no servidor. Não é possível usar yt-dlp desta forma.</p>";
    echo "<p class='warn'>Mas não se preocupe — veja a solução alternativa no final desta página.</p>";
    goto alternativa;
}

// ── Extrai versão numérica do Python ─────────────────────────────────────────
preg_match('/(\d+)\.(\d+)/', $pyVer, $vm);
$pyMajor = (int)($vm[1] ?? 0);
$pyMinor = (int)($vm[2] ?? 0);

// Escolhe versão do yt-dlp compatível
if ($pyMajor > 3 || ($pyMajor === 3 && $pyMinor >= 10)) {
    $ytdlpVer = 'latest';
    $dlUrl    = 'https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp';
    echo "<p class='ok'>✅ Python $pyMajor.$pyMinor compatível com yt-dlp mais recente.</p>";
} elseif ($pyMajor === 3 && $pyMinor >= 7) {
    // Última versão compatível com Python 3.7-3.9
    $ytdlpVer = '2023.02.17';
    $dlUrl    = "https://github.com/yt-dlp/yt-dlp/releases/download/$ytdlpVer/yt-dlp";
    echo "<p class='warn'>⚠ Python $pyMajor.$pyMinor — usando yt-dlp $ytdlpVer (última compatível).</p>";
} else {
    // Python 3.6 — versão mais antiga possível
    $ytdlpVer = '2022.11.11';
    $dlUrl    = "https://github.com/yt-dlp/yt-dlp/releases/download/$ytdlpVer/yt-dlp";
    echo "<p class='warn'>⚠ Python $pyMajor.$pyMinor — usando yt-dlp $ytdlpVer (última compatível com Python 3.6).</p>";
}

// ── Remove instalação anterior ────────────────────────────────────────────────
if (file_exists($ytdlp)) {
    is_dir($ytdlp) ? shell_exec("rm -rf ".escapeshellarg($ytdlp)) : unlink($ytdlp);
    echo "<p class='mut'>Instalação anterior removida.</p>";
}

// ── Baixa o script yt-dlp ─────────────────────────────────────────────────────
echo "<p>⬇ Baixando yt-dlp $ytdlpVer...</p>"; flush();

$ch = curl_init($dlUrl);
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) < 50000) {
    echo "<p class='err'>❌ Falha ao baixar (HTTP $code, ".strlen($data ?: '')." bytes).</p>";
    goto alternativa;
}

file_put_contents($ytdlp, $data);
chmod($ytdlp, 0755);
$sizeMB = round(strlen($data)/1024/1024, 1);
echo "<p class='ok'>✅ Download concluído: {$sizeMB}MB</p>"; flush();

// ── Testa executando com Python explicitamente ────────────────────────────────
echo "<p>🔍 Testando com Python...</p>"; flush();

// Modo 1: executar diretamente com Python (ignora shebang)
$cmd1   = "$python $ytdlp --version 2>&1";
$out1   = trim(shell_exec($cmd1) ?: '');
echo "<pre>\$ $cmd1\n$out1</pre>"; flush();

$working   = false;
$workingCmd = '';

if ($out1 && strpos($out1,'Error')===false && strpos($out1,'Traceback')===false && strlen($out1)<30) {
    $working    = true;
    $workingCmd = "$python $ytdlp";
} else {
    // Modo 2: cria wrapper script que chama Python explicitamente
    echo "<p>Criando wrapper script...</p>"; flush();
    $wrapper = "#!/bin/bash\nexec $python $ytdlp \"\$@\"\n";
    $wrapperPath = "$base/yt-dlp-run";
    file_put_contents($wrapperPath, $wrapper);
    chmod($wrapperPath, 0755);

    $out2 = trim(shell_exec("$wrapperPath --version 2>&1") ?: '');
    echo "<pre>\$ $wrapperPath --version\n$out2</pre>"; flush();

    if ($out2 && strpos($out2,'Error')===false && strlen($out2)<30) {
        $working    = true;
        $workingCmd = $wrapperPath;
    }
}

if ($working) {
    echo "<p class='ok' style='font-size:18px'>✅ yt-dlp funcionando!</p>";

    // Atualiza api.php para usar Python + yt-dlp
    echo "<h3>🔧 Atualizando api.php...</h3>";

    $apiFile = "$base/api.php";
    if (file_exists($apiFile)) {
        $apiContent = file_get_contents($apiFile);

        // Substitui a função getYtDlpPath para retornar o comando correto
        $oldFunc = "function getYtDlpPath() {
    // Locais comuns em cPanel/Linux
    \$paths = [
        '/usr/local/bin/yt-dlp',
        '/usr/bin/yt-dlp',
        trim(shell_exec('which yt-dlp 2>/dev/null') ?: ''),
        __DIR__ . '/yt-dlp',       // na mesma pasta do projeto
        __DIR__ . '/bin/yt-dlp',
    ];
    foreach (\$paths as \$p) {
        if (\$p && is_executable(\$p)) return \$p;
    }
    return null;
}";

        $newFunc = "function getYtDlpPath() {
    // Tenta yt-dlp-run (wrapper bash) primeiro
    \$wrapper = __DIR__ . '/yt-dlp-run';
    if (file_exists(\$wrapper) && is_executable(\$wrapper)) return \$wrapper;

    // Tenta executar yt-dlp com Python explicitamente
    \$script = __DIR__ . '/yt-dlp';
    if (file_exists(\$script)) {
        \$pythons = ['python3.10','python3.11','python3.12','python3.9','python3.8','python3.7','python3.6','python3','python'];
        foreach (\$pythons as \$py) {
            \$path = trim(shell_exec(\"which \$py 2>/dev/null\") ?: '');
            if (\$path && file_exists(\$path)) {
                \$ver = trim(shell_exec(\"\$path \$script --version 2>&1\") ?: '');
                if (\$ver && strlen(\$ver) < 30 && strpos(\$ver,'Error')===false) {
                    // Cria wrapper e retorna
                    \$wp = __DIR__ . '/yt-dlp-run';
                    file_put_contents(\$wp, \"#!/bin/bash\\nexec \$path \$script \\\"\\$@\\\"\\n\");
                    chmod(\$wp, 0755);
                    return \$wp;
                }
            }
        }
        return null;
    }

    // Locais padrão do sistema
    \$paths = ['/usr/local/bin/yt-dlp','/usr/bin/yt-dlp',
              trim(shell_exec('which yt-dlp 2>/dev/null') ?: '')];
    foreach (\$paths as \$p) { if (\$p && is_executable(\$p)) return \$p; }
    return null;
}";

        if (strpos($apiContent, 'function getYtDlpPath()') !== false) {
            $apiContent = str_replace($oldFunc, $newFunc, $apiContent);
            // Se não substituiu exatamente, força a função nova no início
            if (strpos($apiContent, 'yt-dlp-run') === false) {
                $apiContent = str_replace(
                    'function getYtDlpPath() {',
                    "// ATUALIZADO AUTOMATICAMENTE\n" . $newFunc . "\nfunction getYtDlpPath_OLD() {",
                    $apiContent
                );
            }
            file_put_contents($apiFile, $apiContent);
            echo "<p class='ok'>✅ api.php atualizado.</p>";
        } else {
            echo "<p class='warn'>⚠ Não foi possível atualizar api.php automaticamente.</p>";
        }
    }

    // Testa extração de URL
    echo "<h3>🎵 Testando extração de URL do YouTube...</h3>"; flush();
    $testCmd = "$workingCmd --no-check-certificate --no-playlist -f 'bestaudio[ext=m4a]/bestaudio/best' --get-url 'https://www.youtube.com/watch?v=jNQXAC9IVRw' 2>&1";
    echo "<pre class='mut'>\$ $testCmd</pre>"; flush();
    $testOut = trim(shell_exec($testCmd) ?: '');

    if (strlen($testOut) > 50 && strpos($testOut,'http') === 0) {
        echo "<p class='ok'>✅ Extração de URL funcionando!</p>";
        echo "<pre class='ok'>URL obtida com sucesso (".strlen($testOut)." chars)</pre>";
    } else {
        echo "<pre>$testOut</pre>";
        if (strpos($testOut, 'Sign in') !== false || strpos($testOut, 'bot') !== false) {
            echo "<p class='warn'>⚠ YouTube bloqueou esta requisição de teste (normal em servidores). A função deve funcionar em produção.</p>";
        } else {
            echo "<p class='warn'>⚠ Teste de URL não concluído, mas o yt-dlp está instalado.</p>";
        }
    }

    echo "<br><div class='step'>
        <p class='ok'><strong>✅ Instalação concluída!</strong></p>
        <p>1. Acesse <a href='api.php?action=ping'>api.php?action=ping</a> para confirmar</p>
        <p>2. O indicador no player deve mudar para <strong style='color:#00e5a0'>ÁUDIO</strong></p>
        <p class='err'>3. <strong>DELETE ESTE ARQUIVO AGORA:</strong> install_ytdlp_v2.php</p>
    </div>";

} else {
    echo "<p class='err'>❌ yt-dlp não pôde ser executado com nenhum método.</p>";

    alternativa:
    echo "<h3>🔄 Solução Alternativa — Sem yt-dlp</h3>";
    echo "<div class='step'>
    <p>Sua hospedagem bloqueia execução de scripts externos por segurança.<br>
    <strong>O Sonora funciona normalmente no modo IFrame (VÍDEO)</strong>:</p>
    <ul style='margin:8px 0 0 20px;line-height:2'>
      <li>Áudio toca normalmente dentro do player</li>
      <li>Ative o <strong>Wake Lock</strong> (botão 🔒 no topbar) para manter a tela ligada</li>
      <li>No Android: adicione o site à tela inicial como PWA (3 pontos → Adicionar à tela inicial) — isso melhora muito a reprodução em segundo plano</li>
      <li>No iOS: Safari → Compartilhar → Adicionar à Tela de Início → abre como app</li>
    </ul>
    </div>";

    echo "<h3>📱 Instalar como PWA (recomendado)</h3>";
    echo "<div class='step'>
    <p>Adicionando à tela inicial, o browser trata como app nativo e permite reprodução em segundo plano mesmo sem yt-dlp.</p>
    </div>";
}

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