<?php
/**
 * get.php - Correção para Monitoramento de Séries e Canais
 */

error_reporting(0);
ini_set('display_errors', 0);

// Limpeza de buffer para garantir redirecionamento limpo
if (ob_get_level()) ob_end_clean();
ob_start();

require_once 'includes/db.php';
ob_clean(); 

// 1. Captura de Dados
$username  = $_REQUEST['username'] ?? '';
$password  = $_REQUEST['password'] ?? '';
$stream_id = $_REQUEST['stream_id'] ?? '';
$extension = $_REQUEST['extension'] ?? 'ts';

// 2. Autenticação Rápida
if (empty($username) || empty($password)) { http_response_code(401); die(); }

try {
    $stmt = $pdo->prepare("SELECT id, username, active, expire_date FROM users WHERE username = ? AND password = ? LIMIT 1");
    $stmt->execute([$username, $password]);
    $user = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$user) { http_response_code(401); die(); }
    if ((int)$user['active'] !== 1) { http_response_code(403); die(); }
    if (!empty($user['expire_date']) && strtotime($user['expire_date']) < time()) { http_response_code(403); die(); }

} catch (Exception $e) { http_response_code(500); die(); }

// 3. Processamento do Streaming
if (!empty($stream_id)) {
    
    $real_link = "";
    $monitor_type = "";
    $monitor_id = 0; // ID que será salvo no banco para o monitor buscar nome/foto

    // A) Verifica se é Arquivo de Vídeo (Filme ou Série)
    if (strpos($extension, 'mp4') !== false || strpos($extension, 'mkv') !== false || strpos($extension, 'avi') !== false) {
        
        // Tenta achar em FILMES
        $q = $pdo->prepare("SELECT stream_url FROM movies WHERE id = ?");
        $q->execute([$stream_id]);
        $res = $q->fetch(PDO::FETCH_ASSOC);
        
        if ($res) {
            $monitor_type = 'movie';
            $monitor_id = $stream_id;
            $real_link = $res['stream_url'];
        } else {
            // Tenta achar em EPISÓDIOS
            // Fazemos JOIN com seasons para pegar o ID da SÉRIE (series_id)
            $q = $pdo->prepare("SELECT e.stream_url, s.series_id 
                                FROM episodes e 
                                JOIN seasons s ON e.season_id = s.id 
                                WHERE e.id = ?");
            $q->execute([$stream_id]);
            $res = $q->fetch(PDO::FETCH_ASSOC);
            
            if ($res) {
                $monitor_type = 'series';
                // O PULO DO GATO: Salvamos o ID da Série, não do episódio, pro monitor achar a capa
                $monitor_id = $res['series_id']; 
                $real_link = $res['stream_url'];
            }
        }

    } else {
        // B) Se não é arquivo, assume que é CANAL (Live)
        $q = $pdo->prepare("SELECT stream_url FROM channels WHERE id = ?");
        $q->execute([$stream_id]);
        $res = $q->fetch(PDO::FETCH_ASSOC);
        
        if ($res) {
            $monitor_type = 'live';
            $monitor_id = $stream_id;
            $real_link = $res['stream_url'];
        }
    }

    // 4. Se achou o link, atualiza o Monitor e Redireciona
    if ($real_link) {
        try {
            $user_ip = $_SERVER['REMOTE_ADDR'];
            $ua = $_SERVER['HTTP_USER_AGENT'] ?? 'Unknown';
            $now = time();

            // Apaga registro anterior "Logado no App" ou canal velho
            $pdo->prepare("DELETE FROM active_connections WHERE user_id = ?")->execute([$user['id']]);

            // Insere o novo registro com o ID CORRETO para o monitor
            $sql = "INSERT INTO active_connections (user_id, username, stream_id, stream_type, user_ip, start_time, user_agent) 
                    VALUES (?, ?, ?, ?, ?, ?, ?)";
            $pdo->prepare($sql)->execute([$user['id'], $user['username'], $monitor_id, $monitor_type, $user_ip, $now, $ua]);
            
        } catch (Exception $e) { 
            // Ignora erro de monitor para não travar o vídeo
        }

        // Redireciona o player para o vídeo real
        header("Location: " . $real_link);
        exit;
    } else {
        http_response_code(404); die();
    }
}

// Se não tiver stream_id (pedido de lista M3U), gera a lista normalmente...
// (Código da lista omitido para focar na correção do monitoramento)
?>
