<?php
require_once 'includes/db.php';

// Recebe os dados via URL (redirecionados pelo .htaccess)
$type     = $_GET['type'] ?? ''; // live, movie, series
$username = $_GET['username'] ?? '';
$password = $_GET['password'] ?? '';
$stream   = $_GET['stream'] ?? ''; // Ex: 105.ts ou 500.mp4

// Limpa a extensão (.ts, .mp4, .mkv) para pegar apenas o ID numérico
$stream_id = (int)$stream;

if (empty($username) || empty($password) || empty($stream_id)) {
    http_response_code(400);
    die("Dados incompletos.");
}

// 1. Validação do Usuário
$stmt = $pdo->prepare("SELECT id, username, active, expire_date FROM users WHERE username = ? AND password = ?");
$stmt->execute([$username, $password]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$user) {
    http_response_code(403); // Acesso Negado
    die("Usuário ou senha inválidos.");
}

if ($user['active'] == 0 || strtotime($user['expire_date']) < time()) {
    http_response_code(403);
    die("Conta expirada ou banida.");
}

// 2. Busca o Link Baseado no Tipo (E PREPARA DADOS PRO MONITOR)
$url = '';
$monitor_name = 'Conteúdo Desconhecido';
$monitor_image = '';

if ($type == 'live') {
    // Busca Canal
    $stmt = $pdo->prepare("SELECT stream_url, name, logo_url FROM channels WHERE id = ?");
    $stmt->execute([$stream_id]);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($row) {
        $url = $row['stream_url'];
        $monitor_name = $row['name'];
        $monitor_image = $row['logo_url'];
    }

} elseif ($type == 'movie') {
    // Busca Filme
    $stmt = $pdo->prepare("SELECT stream_url, name, cover_url FROM movies WHERE id = ?");
    $stmt->execute([$stream_id]);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($row) {
        $url = $row['stream_url'];
        $monitor_name = $row['name'];
        $monitor_image = $row['cover_url'];
    }

} elseif ($type == 'series') {
    // Busca Episódio de Série (JOIN para pegar nome e capa da Série)
    $stmt = $pdo->prepare("SELECT e.stream_url, s.name as serie_name, e.name as ep_name, s.cover_url 
                           FROM episodes e 
                           JOIN seasons sea ON e.season_id = sea.id 
                           JOIN series s ON sea.series_id = s.id 
                           WHERE e.id = ?");
    $stmt->execute([$stream_id]);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($row) {
        $url = $row['stream_url'];
        // Formata nome: Nome da Série - Nome do Episódio
        $monitor_name = $row['serie_name'] . " - " . $row['ep_name'];
        $monitor_image = $row['cover_url'];
    }
}

// 3. Redirecionamento Final e Monitoramento
if ($url) {
    
    // ==============================================================
    // >>> ATUALIZAÇÃO: FAXINA E REGISTRO NO MONITOR
    // ==============================================================
    try {
        $user_ip = $_SERVER['REMOTE_ADDR'];
        $ua = $_SERVER['HTTP_USER_AGENT'] ?? 'Unknown';
        $now = time();

        // 1. FAXINA AUTOMÁTICA (Remove quem já parou de assistir faz tempo)
        // Canais: Limpa se > 5 minutos (300 segundos)
        $pdo->query("DELETE FROM active_connections WHERE stream_type='live' AND start_time < " . ($now - 300));
        // Filmes/Séries: Limpa se > 70 minutos (4200 segundos)
        $pdo->query("DELETE FROM active_connections WHERE stream_type IN ('movie','series') AND start_time < " . ($now - 4200));

        // 2. Limpa registro anterior deste usuário específico (para não duplicar)
        $pdo->prepare("DELETE FROM active_connections WHERE user_id = ?")->execute([$user['id']]);

        // 3. Insere novo registro com NOME e FOTO
        $sql = "INSERT INTO active_connections (user_id, username, stream_id, stream_type, content_name, content_image, user_ip, start_time, user_agent) 
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
        $stmt_mon = $pdo->prepare($sql);
        $stmt_mon->execute([
            $user['id'], 
            $user['username'], 
            $stream_id, 
            $type, 
            $monitor_name, 
            $monitor_image, 
            $user_ip, 
            $now, 
            $ua
        ]);
    } catch (Exception $e) {
        // Silencia erro do monitor para não travar o vídeo
    }
    // ==============================================================

    // Redireciona o player para o link real (M3U/MP4/MKV)
    header("Location: " . $url);
    exit;
} else {
    http_response_code(404);
    die("Conteúdo não encontrado no banco de dados.");
}
?>
