<?php
// Desativa erros para não corromper o arquivo de vídeo que vai para o player
ini_set('display_errors', 0);
error_reporting(0);

require_once 'config.php';
$pdo = getConexaoAtiva();

$user = $_GET['user'] ?? '';
$pass = $_GET['pass'] ?? '';
$file = basename($_GET['file'] ?? ''); // basename evita falhas de segurança de hackers tentando navegar nas pastas

if (empty($user) || empty($pass) || empty($file)) {
    header("HTTP/1.0 400 Bad Request");
    exit;
}

// 1. AUTENTICA O CLIENTE (Buscamos também a última atividade para calcular o tempo de conexão)
$stmt = $pdo->prepare("SELECT id, exp_date, last_activity FROM users WHERE username = ? AND password = ? AND enabled = 1");
$stmt->execute([$user, $pass]);
$cliente = $stmt->fetch(PDO::FETCH_ASSOC);

// Bloqueia se não existir ou se estiver vencido
if (!$cliente || ($cliente['exp_date'] != 0 && $cliente['exp_date'] < time())) {
    header("HTTP/1.1 401 Unauthorized");
    exit;
}

// 2. DESCOBRE O ID DO CANAL PELO NOME DO ARQUIVO (Ex: "105_.m3u8" ou "105_0001.ts" vira o ID "105")
$id_canal = 0;
if (preg_match('/^(\d+)_/', $file, $matches)) {
    $id_canal = (int)$matches[1];
}

// 3. PEGA O IP REAL DO CLIENTE
$ip_cliente = $_SERVER['HTTP_CLIENT_IP'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'];

// 4. ATUALIZA O "BATE CORAÇÃO" (Online, Canal, IP e Tempo)
$agora = time();
$ultima_ativ = (int)$cliente['last_activity'];

// Se o cliente ficou sem pedir vídeo por mais de 60 segundos, consideramos que ele tinha saído e voltou agora (Zera o Uptime dele)
$nova_sessao = ($agora - $ultima_ativ > 60) ? 1 : 0; 

$sql_update = "UPDATE users SET 
                last_activity = ?, 
                current_channel = ?, 
                last_ip = ?, 
                connected_at = IF(connected_at = 0 OR ? > 0, ?, connected_at) 
               WHERE id = ?";
               
$pdo->prepare($sql_update)->execute([
    $agora, 
    $id_canal, 
    $ip_cliente, 
    $nova_sessao, 
    $agora, 
    $cliente['id']
]);

// 5. ENTREGA O VÍDEO DIRETO DA MEMÓRIA RAM DO SERVIDOR
$filepath = "/var/www/html/streams/" . $file;

if (file_exists($filepath)) {
    $ext = pathinfo($filepath, PATHINFO_EXTENSION);
    if ($ext === 'm3u8') {
        header('Content-Type: application/vnd.apple.mpegurl');
    } elseif ($ext === 'ts') {
        header('Content-Type: video/mp2t');
    }
    
    header('Cache-Control: no-cache, must-revalidate');
    header('Content-Length: ' . filesize($filepath));
    
    // Lê o arquivo da RAM e joga direto para a TV do cliente (Processo extremamente rápido)
    readfile($filepath);
    exit;
} else {
    // Se o pedaço do vídeo ainda não existe, retorna 404 para o aplicativo tentar de novo daqui a pouco
    header("HTTP/1.0 404 Not Found");
    exit;
}
?>
