<?php
// Desativa exibição de erros para não corromper o arquivo M3U
ini_set('display_errors', 0);
error_reporting(0);

require_once 'config.php';

// Inicia o buffer de saída para evitar espaços em branco acidentais
ob_start();

$pdo = getConexaoAtiva();

$username = $_GET['username'] ?? '';
$password = $_GET['password'] ?? '';
$output   = $_GET['output'] ?? 'ts';

if (empty($username) || empty($password)) {
    header("HTTP/1.0 400 Bad Request");
    die("Parametros ausentes.");
}

// Verifica usuário no banco
$stmt = $pdo->prepare("SELECT id, username, exp_date, enabled FROM users WHERE username = ? AND password = ?");
$stmt->execute([$username, $password]);
$cliente = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$cliente || $cliente['enabled'] == 0 || ($cliente['exp_date'] !== null && $cliente['exp_date'] < time())) {
    header("HTTP/1.0 401 Unauthorized");
    die("Usuario invalido ou vencido.");
}

// Marca atividade
$pdo->prepare("UPDATE users SET last_activity = ? WHERE id = ?")->execute([time(), $cliente['id']]);

// Configuração da URL do Servidor
$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? "https" : "http";
$server_url = $protocol . "://" . $_SERVER['HTTP_HOST'];

// Verifica se o modo Token está ativo
$usar_token = false;
$token_xui = "";
try {
    $conf = $pdo->query("SELECT m3u_token_mode FROM painel_config LIMIT 1")->fetch(PDO::FETCH_ASSOC);
    if ($conf && $conf['m3u_token_mode'] == 1) {
        $usar_token = true;
        $token_base = base64_encode($username . ":" . $password);
        $token_clean = str_replace('=', '', strtr($token_base, '+/', '-_'));
        $token_xui = "NBR_" . $token_clean;
    }
} catch (Exception $e) {
    $usar_token = false;
}

// --- HEADERS PARA DESBLOQUEAR DOWNLOAD E COMPATIBILIDADE ---
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET");
header("Content-Type: application/x-mpegurl; charset=utf-8");
header('Content-Disposition: attachment; filename="lista.m3u"');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');

// Limpa qualquer saída anterior para garantir que o arquivo comece com #EXTM3U
ob_clean();

echo "#EXTM3U\n";
echo "#EXT-X-SESSION-DATA:DATA-ID=\"com.Koffice.Panel.4.1.23\"\n";

// --- CANAIS AO VIVO (Type 1 e 3) ---
$stmtLive = $pdo->query("SELECT s.id, s.stream_display_name, s.stream_icon, c.category_name FROM streams s LEFT JOIN stream_categories c ON s.category_id = c.id WHERE s.type IN (1, 3)");
while ($row = $stmtLive->fetch(PDO::FETCH_ASSOC)) {
    $name = $row['stream_display_name'];
    $icon = $row['stream_icon'];
    $cat  = $row['category_name'] ?? 'Canais';
    
    echo '#EXTINF:-1 tvg-logo="'.$icon.'" group-title="'.$cat.'",'.$name."\n";
    
    // CORREÇÃO: Forçado para sempre gerar .m3u8 nos canais ao vivo
    $ext = ".m3u8"; 
    
    if ($usar_token) {
        echo $server_url . "/play/" . $token_xui . "/" . $row['id'] . $ext . "\n";
    } else {
        echo $server_url . "/live/" . $username . "/" . $password . "/" . $row['id'] . $ext . "\n";
    }
}

// --- FILMES (Type 2) ---
$stmtVod = $pdo->query("SELECT s.id, s.stream_display_name, s.stream_icon, c.category_name FROM streams s LEFT JOIN stream_categories c ON s.category_id = c.id WHERE s.type = 2");
while ($row = $stmtVod->fetch(PDO::FETCH_ASSOC)) {
    $name = $row['stream_display_name'];
    $icon = $row['stream_icon'];
    $cat  = $row['category_name'] ?? 'Filmes';
    
    echo '#EXTINF:-1 tvg-logo="'.$icon.'" group-title="'.$cat.'",'.$name."\n";
    
    // Para filmes (VOD), o padrão recomendado é .mp4 para melhor compatibilidade
    $ext_v = ".mp4";
    
    if ($usar_token) {
        echo $server_url . "/play/" . $token_xui . "/" . $row['id'] . $ext_v . "\n";
    } else {
        echo $server_url . "/movie/" . $username . "/" . $password . "/" . $row['id'] . $ext_v . "\n";
    }
}

// Finaliza a execução
exit;