<?php
// stream.php - REDIRECIONAMENTO PURO E DIRETO (VOD E LIVE)
ob_start();
error_reporting(0);
ini_set('display_errors', 0);

require_once 'config.php';

$token = $_GET['token'] ?? '';
$user  = $_GET['user'] ?? '';
$pass  = $_GET['pass'] ?? '';
$id    = $_GET['id'] ?? '';
$ext   = $_GET['ext'] ?? ''; 
$type  = $_GET['type'] ?? ''; // Recupera o tipo injetado pelo .htaccess

// 1. DESCRIPTOGRAFA O TOKEN NBR
if (!empty($token) && strpos($token, 'NBR_') === 0) {
    $base64 = substr($token, 4);
    $decoded = base64_decode(strtr($base64, '-_', '+/'));
    if ($decoded && strpos($decoded, ':') !== false) {
        list($user, $pass) = explode(':', $decoded);
    } else {
        header("HTTP/1.0 403 Forbidden"); die("Token Invalido");
    }
}

if (empty($user) || empty($pass) || empty($id)) {
    header("HTTP/1.0 400 Bad Request"); die("Parametros ausentes");
}

$pdo = getConexaoAtiva();
$pdo_int = getConexaoInterna();

$modo_ativo = 'interno';
try { $modo_ativo = $pdo_int->query("SELECT modo_ativo FROM configuracoes LIMIT 1")->fetchColumn() ?: 'interno'; } catch(Exception $e){}

// =======================================================================
// RASTREADOR HÍBRIDO KOFFICE
// =======================================================================
try {
    $ip_cliente = $_SERVER['HTTP_CLIENT_IP'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'];
    $agora = time();
    $tabela_clientes = ($modo_ativo === 'xui') ? '`lines`' : '`users`';
    
    $stmtU = $pdo->prepare("SELECT id FROM $tabela_clientes WHERE username = ? LIMIT 1");
    $stmtU->execute([$user]);
    $uid = $stmtU->fetchColumn();
    
    if ($uid) {
        try {
            $pdo->prepare("UPDATE $tabela_clientes SET last_activity = ?, last_ip = ?, current_channel = ? WHERE id = ?")->execute([$agora, $ip_cliente, $id, $uid]);
        } catch(Exception $e) {
            $pdo->prepare("UPDATE $tabela_clientes SET last_activity = ?, last_ip = ? WHERE id = ?")->execute([$agora, $ip_cliente, $uid]);
        }
    }
} catch(Exception $e){}

$link_real = "";

// =======================================================================
// BUSCANDO A FONTE ORIGINAL DO CONTEÚDO NO BANCO DE DADOS
// =======================================================================
try {
    $stmtSrc = $pdo->prepare("SELECT stream_source FROM streams WHERE id = ? LIMIT 1");
    $stmtSrc->execute([$id]);
    $source = $stmtSrc->fetchColumn();
    
    if (empty($source)) {
        $tabela_ep = ($modo_ativo === 'xui') ? 'streams_episodes' : 'series_episodes';
        $stmtSrcS = $pdo->prepare("SELECT stream_source FROM $tabela_ep WHERE stream_id = ? LIMIT 1");
        $stmtSrcS->execute([$id]);
        $source = $stmtSrcS->fetchColumn();
    }

    if (!empty($source)) {
        $source_clean = trim(str_replace(['[', ']', '"', '\\', "'"], '', $source));
        $source_parts = explode(',', $source_clean);
        
        foreach ($source_parts as $candidato) {
            $candidato = trim($candidato);
            // Ignora links locais/loopback
            if (strpos($candidato, 'http') === 0 && strpos($candidato, '127.0.0.1') === false && strpos($candidato, 'localhost') === false) { 
                $link_real = $candidato; 
                break;
            }
        }
    }
} catch(Exception $e){}

// Se não achou no banco, devolve 404 em vez de criar um Link de Fallback infinito
if (empty($link_real)) {
    header("HTTP/1.0 404 Not Found"); 
    die("Stream nao encontrado no servidor.");
}

// =======================================================================
// SEPARAÇÃO INTELIGENTE: FILMES/SÉRIES (VOD) x TV AO VIVO
// =======================================================================
// Agora usa o parâmetro TYPE do .htaccess + a extensão para não errar no VOD
$is_vod = ($type === 'movie' || $type === 'series' || (!empty($ext) && in_array(strtolower($ext), ['mp4', 'mkv', 'avi'])));

while (ob_get_level()) { ob_end_clean(); } // Limpa qualquer sujeira da tela para o header funcionar

if ($is_vod) {
    // -------------------------------------------------------------
    // FILMES E SÉRIES
    // -------------------------------------------------------------
    $link_real = str_replace([' ', '[', ']', '{', '}'], ['%20', '%5B', '%5D', '%7B', '%7D'], $link_real);

    // VOD precisa permitir algum cache para o SS IPTV conseguir avançar/retroceder
    header("Cache-Control: public, max-age=3600");
    header("Location: " . trim($link_real), true, 302);
    exit;

} else {
    // -------------------------------------------------------------
    // TV AO VIVO
    // -------------------------------------------------------------
    if (!preg_match('/(backblaze|b2|amazonaws|google|drive|telegram|t\.me|api)/i', $link_real)) {
        // Tenta rodar canais ao vivo via HTTP (mais leve para TVs velhas com SS IPTV que falham no SSL)
        $link_real = str_replace('https://', 'http://', $link_real);
    }
    $link_real = str_replace(' ', '%20', $link_real);

    header("X-LiteSpeed-Cache-Control: no-cache");
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    
    header("Location: " . trim($link_real), true, 302);
    exit;
}
?>
