<?php
// --- CORREÇÃO DE MEMÓRIA E VELOCIDADE MÁXIMA ---
ini_set('memory_limit', '-1'); 
set_time_limit(0); 
date_default_timezone_set('America/Sao_Paulo'); 

session_start();
require_once 'config.php';

$pdo = getConexaoAtiva(); 
$pdo->exec("SET NAMES utf8mb4");

// LIMPEZA DO CACHE TMDB NO FINAL DO PROCESSO
if (isset($_GET['clean_tmdb_cache'])) {
    unset($_SESSION['tmdb_cache_import']);
    exit;
}

// --- INÍCIO: BUSCA DE PERSONALIZAÇÃO DINÂMICA ---
$nome_painel = 'TOP IPTV';
$logo_url = '';
$cor_primaria = '#007bff';

try {
    $tabela_existe = $pdo->query("SHOW TABLES LIKE 'painel_config'")->rowCount() > 0;
    if ($tabela_existe) {
        $config_painel = $pdo->query("SELECT * FROM painel_config LIMIT 1")->fetch(PDO::FETCH_ASSOC);
        if ($config_painel) {
            $nome_painel = !empty($config_painel['nome_painel']) ? $config_painel['nome_painel'] : $nome_painel;
            $logo_url = !empty($config_painel['logo_url']) ? $config_painel['logo_url'] : $logo_url;
            $cor_primaria = !empty($config_painel['cor_primaria']) ? $config_painel['cor_primaria'] : $cor_primaria;
        }
    }
} catch (Exception $e) {}
// --- FIM: BUSCA DE PERSONALIZAÇÃO DINÂMICA ---

if (!isset($_SESSION['user_id'])) { header("Location: login.php"); exit; }
$nome_usuario = $_SESSION['username'];
$user_id_logado = $_SESSION['user_id'];
$role = $_SESSION['user_role'];

// 1. GARANTE AS TABELAS NO BANCO INTERNO
try {
    $pdo->exec("CREATE TABLE IF NOT EXISTS series (
        id INT(11) AUTO_INCREMENT PRIMARY KEY,
        title VARCHAR(255) NOT NULL,
        category_id INT(11) NOT NULL,
        cover VARCHAR(255) NULL,
        plot TEXT NULL,
        last_modified INT(11) NULL
    )");
    $pdo->exec("ALTER TABLE streams ADD COLUMN IF NOT EXISTS notes TEXT NULL"); 
} catch (Exception $e) { }

// =========================================================================
// API AJAX - INSERÇÃO E ATUALIZAÇÃO DOS BOUQUETS EM TEMPO REAL (POR LOTE)
// =========================================================================
if (isset($_GET['ajax_import']) && $_GET['ajax_import'] == 1) {
    header('Content-Type: application/json; charset=utf-8');
    
    $payload = json_decode(file_get_contents('php://input'), true);
    if (!$payload || empty($payload['itens'])) {
        echo json_encode(['status' => 'error', 'msg' => 'Nenhum item recebido.']);
        exit;
    }
    
    // Busca a chave do TMDB do banco de dados, se não tiver usa uma genérica
    $stmt_config = $pdo->query("SELECT tmdb_api_key FROM painel_config LIMIT 1")->fetch(PDO::FETCH_ASSOC);
    $tmdb_key_db = $stmt_config['tmdb_api_key'] ?? '';
    $tmdb_key_uso = !empty($tmdb_key_db) ? trim($tmdb_key_db) : 'f99aa9ae1fe7619969cc7db0938c1ae5';
    define('TMDB_API_KEY', $tmdb_key_uso);
    
    function buscarDadosTMDB($nome, $tipo_busca = 'movie') {
        $ano = '';
        if (preg_match('/\((\d{4})\)|\b(\d{4})\b/', $nome, $matches)) {
            $ano = $matches[1] ?? $matches[2];
        }

        $n = preg_replace('/\[.*?\]/', '', $nome); 
        $n = preg_replace('/\(\d{4}\)/', '', $n); 
        $n = preg_replace('/\b(FHD|HD|SD|4K|1080p|720p|3D|DUB|LEG|DUBLADO|LEGENDADO|VOD|BR|PT|PT-BR|MKV|MP4|AVI)\b/i', '', $n);
        $n = str_replace(['.', '_'], ' ', $n);
        $nome_limpo = trim(preg_replace('/\s+/', ' ', $n));

        if (empty($nome_limpo)) return null;
        
        $endpoint = ($tipo_busca === 'series') ? 'tv' : 'movie';
        $url = "https://api.themoviedb.org/3/search/{$endpoint}?api_key=" . TMDB_API_KEY . "&query=" . urlencode($nome_limpo) . "&language=pt-BR";
        
        if (!empty($ano) && $tipo_busca === 'movie') {
            $url .= "&primary_release_year=" . $ano;
        }
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
        $res = curl_exec($ch);
        curl_close($ch);
        
        if (!$res) {
            $res = @file_get_contents($url);
        }
        
        if (!$res) return null;
        $dados = json_decode($res, true);
        
        if (isset($dados['results'][0])) {
            $item = $dados['results'][0];
            return [
                'plot' => $item['overview'] ?? '', 
                'capa' => !empty($item['poster_path']) ? "https://image.tmdb.org/t/p/w500" . $item['poster_path'] : ''
            ];
        }
        return null;
    }

    if (!isset($_SESSION['tmdb_cache_import'])) {
        $_SESSION['tmdb_cache_import'] = [];
    }

    $itens = $payload['itens'];
    $bouquets_sel = $payload['bouquets'];
    $novos_stream_ids = [];
    $novas_series_ids = []; 
    $relatorio_lote = ['FILMES' => [], 'SÉRIES' => [], 'CANAIS AO VIVO' => []];
    $log_msgs = [];
    
    foreach ($itens as $item) {
        $cat_nome = $item['cat']; // Este já é o nome RENOMEADO, se o usuário tiver alterado na tela
        $nome = $item['nome'];
        $link = $item['link'];
        $extinf = $item['extinf'];
        
        $cat_nome_lower = mb_strtolower($cat_nome, 'UTF-8');
        
        // =========================================================================================
        // MOTOR DE CLASSIFICAÇÃO NINJA (Canais vs Filmes vs Séries)
        // =========================================================================================
        
        $is_live_url = preg_match('/\/live\//i', $link) ? true : false;
        $is_movie_url = preg_match('/\/movie\//i', $link) ? true : false;
        $is_series_url = preg_match('/\/series\//i', $link) ? true : false;

        // 1. Prioridade Máxima: A URL do Streaming (Padrão XTREAM)
        if ($is_movie_url) { 
            $type = 2; 
        }
        elseif ($is_series_url) { 
            $type = 5; 
        }
        elseif ($is_live_url) { 
            $type = 1; 
        }
        else {
            // 2. Se a URL não disser, olhamos a Categoria!
            
            // É CANAL COM CERTEZA?
            if (preg_match('/\b(canais|ao vivo|24h|24 hrs|24 horas|tv aberta|tv fechada|esportes|noticias)\b/i', $cat_nome_lower)) {
                $type = 1;
            }
            // CATEGORIA MISTA (Ex: "Filmes e Series")
            elseif (preg_match('/filme/i', $cat_nome_lower) && preg_match('/s[eé]rie/i', $cat_nome_lower)) {
                // Desempate pelo nome do Arquivo/Episódio
                if (preg_match('/(?:S\d{1,2}\s*E\d{1,3}|S\d{1,2}E\d{1,3}|Temporada\s*\d+|Season\s*\d+|EP\s*\d{1,3}|CAP\s*\d{1,3}|\b\d{1,2}x\d{1,3}\b)/i', $nome)) {
                    $type = 5; 
                } else {
                    $type = 2; 
                }
            }
            // É SÓ FILME?
            elseif (preg_match('/\b(filmes?|vod|cinema|lan[çc]amentos?)\b/i', $cat_nome_lower)) {
                $type = 2;
            }
            // É SÓ SÉRIE?
            elseif (preg_match('/\b(s[eé]ries?|novelas?)\b/i', $cat_nome_lower)) {
                $type = 5;
            }
            // É ANIME/KIDS? (Pode ser filme longo ou episódio)
            elseif (preg_match('/\b(animes?|desenhos?|kids)\b/i', $cat_nome_lower)) {
                if (preg_match('/(?:S\d{1,2}\s*E\d{1,3}|S\d{1,2}E\d{1,3}|Temporada\s*\d+|Season\s*\d+|EP\s*\d{1,3}|CAP\s*\d{1,3}|\b\d{1,2}x\d{1,3}\b)/i', $nome)) {
                    $type = 5;
                } else {
                    $type = 2;
                }
            }
            // FALLBACK TOTAL: Se o fornecedor inventou um nome louco
            else {
                if (preg_match('/(?:S\d{1,2}\s*E\d{1,3}|S\d{1,2}E\d{1,3}|Temporada\s*\d+|Season\s*\d+|EP\s*\d{1,3}|CAP\s*\d{1,3}|\b\d{1,2}x\d{1,3}\b)/i', $nome)) {
                    $type = 5; 
                } else {
                    $type = 1; 
                }
            }
        }
        // =========================================================================================

        $is_series = ($type == 5);
        $cat_type_str = ($type == 5) ? 'series' : (($type == 2) ? 'movie' : 'live');

        $tipo_grupo = ($type == 1) ? 'CANAIS AO VIVO' : (($type == 2) ? 'FILMES' : 'SÉRIES');
        $icone_item = ($type == 1) ? '📺' : (($type == 2) ? '📽️' : '🎬');

        $logo_m3u = '';
        if (preg_match('/tvg-logo="(.*?)"/i', $extinf, $logo_match)) {
            $logo_m3u = trim($logo_match[1]);
        }

        // Verifica Categoria
        $stmt_cat = $pdo->prepare("SELECT id FROM stream_categories WHERE category_name = ? AND category_type = ?");
        $stmt_cat->execute([$cat_nome, $cat_type_str]);
        $cat_id = $stmt_cat->fetchColumn();
        if (!$cat_id) {
            $pdo->prepare("INSERT INTO stream_categories (category_name, category_type) VALUES (?, ?)")->execute([$cat_nome, $cat_type_str]);
            $cat_id = $pdo->lastInsertId();
        }

        // FILTRO DE DUPLICATAS
        $stmt_dup = $pdo->prepare("SELECT id FROM streams WHERE stream_source = ? LIMIT 1");
        $stmt_dup->execute([$link]);
        $id_existente = $stmt_dup->fetchColumn();

        if ($id_existente) {
            $novos_stream_ids[] = (int)$id_existente;
            if ($is_series) {
                try {
                    $s_id = $pdo->query("SELECT series_id FROM series_episodes WHERE stream_id = " . (int)$id_existente)->fetchColumn();
                    if ($s_id) $novas_series_ids[] = (int)$s_id;
                } catch(Exception $e) {}
            }
            $log_msgs[] = "<span class='info'>[PULADO]</span> $nome (Já Existe - Adicionado ao Pacote)";
            continue; 
        }

        $logMsgStr = "<span class='info'>[Processando]</span> " . htmlspecialchars($nome);

        // Inserção Limpa
        if ($is_series) {
            $serie_title = $nome; 
            $season_num = 1; 
            $ep_num = 1;
            
            if (preg_match('/^(.*?)(?:\s*|-|_)*(?:S|T|TEMP|TEMPORADA|SEASON)[a-z]*\s*(\d+).*?(?:E|EP|CAP|CAPITULO|EPISODIO)[a-z]*\s*(\d+)/i', $nome, $m)) {
                $serie_title = trim($m[1]); $season_num = (int)$m[2]; $ep_num = (int)$m[3];
            } 
            elseif (preg_match('/^(.*?)(?:\s*|-|_)+(\d{1,2})x(\d{1,3})/i', $nome, $m)) {
                $serie_title = trim($m[1]); $season_num = (int)$m[2]; $ep_num = (int)$m[3];
            } 
            elseif (preg_match('/^(.*?)(?:\s*|-|_)+(?:E|EP|CAP|CAPITULO|EPISODIO)[a-z]*\s*(\d+)/i', $nome, $m)) {
                $serie_title = trim($m[1]); $season_num = 1; $ep_num = (int)$m[2];
            }

            $serie_title_limpo = preg_replace('/(\[.*?\]|\(.*?\))/', '', $serie_title); 
            $serie_title_limpo = preg_replace('/(?:\s*|-|_)*(?:S|T|TEMP|TEMPORADA|SEASON)[a-z]*\s*\d+.*$/i', '', $serie_title_limpo); 
            $serie_title_limpo = trim($serie_title_limpo, " -_|");

            if(empty($serie_title_limpo)) $serie_title_limpo = $serie_title;

            $capa = $logo_m3u;
            $plot = "";
            
            // CACHE TMDB PARA VOAR (PESQUISA SÓ 1 VEZ POR SÉRIE)
            $cache_key = md5($serie_title_limpo . '_series');
            if (!array_key_exists($cache_key, $_SESSION['tmdb_cache_import'])) {
                $logMsgStr .= " <span class='tmdb'>-> TMDB...</span>";
                $_SESSION['tmdb_cache_import'][$cache_key] = buscarDadosTMDB($serie_title_limpo, 'series');
            }
            
            $tmdb = $_SESSION['tmdb_cache_import'][$cache_key];
            if ($tmdb) { 
                $capa = $tmdb['capa']; 
                $plot = $tmdb['plot']; 
                $logMsgStr .= " <span class='success'>[TMDB OK]</span>"; 
            } else {
                $logMsgStr .= " <span style='color:#e74c3c;'>[TMDB FALHOU]</span>";
            }

            $stmt_serie = $pdo->prepare("SELECT id FROM series WHERE title = ? AND category_id = ?");
            $stmt_serie->execute([$serie_title_limpo, $cat_id]);
            $serie_id = $stmt_serie->fetchColumn();
            
            if (!$serie_id) {
                $pdo->prepare("INSERT INTO series (title, category_id, cover, plot, last_modified) VALUES (?, ?, ?, ?, ?)")->execute([$serie_title_limpo, $cat_id, $capa, $plot, time()]);
                $serie_id = $pdo->lastInsertId();
            }

            $pdo->prepare("INSERT INTO streams (stream_display_name, stream_source, category_id, stream_icon, type, added) VALUES (?, ?, ?, ?, ?, ?)")->execute([$nome, $link, $cat_id, $capa, 5, time()]);
            $episode_stream_id = $pdo->lastInsertId();
            
            try {
                $pdo->prepare("INSERT INTO series_episodes (season_num, series_id, stream_id, sort) VALUES (?, ?, ?, ?)")->execute([$season_num, $serie_id, $episode_stream_id, $ep_num]);
            } catch (Exception $e) { }
            
            $novos_stream_ids[] = (int)$episode_stream_id;
            $novas_series_ids[] = (int)$serie_id;
            $relatorio_lote[$tipo_grupo][$cat_nome][] = $icone_item . " " . $nome; 
            
            $log_msgs[] = $logMsgStr;
            
        } else {
            $capa = $logo_m3u; 
            $plot = ""; 
            if ($type == 2) { 
                $cache_key = md5($nome . '_movie');
                if (!array_key_exists($cache_key, $_SESSION['tmdb_cache_import'])) {
                    $logMsgStr .= " <span class='tmdb'>-> TMDB...</span>";
                    $_SESSION['tmdb_cache_import'][$cache_key] = buscarDadosTMDB($nome, 'movie');
                }
                $tmdb = $_SESSION['tmdb_cache_import'][$cache_key];
                if ($tmdb) { 
                    $capa = $tmdb['capa']; 
                    $plot = $tmdb['plot']; 
                    $logMsgStr .= " <span class='success'>[TMDB OK]</span>"; 
                } else {
                    $logMsgStr .= " <span style='color:#e74c3c;'>[TMDB FALHOU]</span>";
                }
            }
            
            $log_msgs[] = $logMsgStr;
            
            try {
                $pdo->prepare("INSERT INTO streams (stream_display_name, stream_source, category_id, stream_icon, type, added, notes) VALUES (?, ?, ?, ?, ?, ?, ?)")->execute([$nome, $link, $cat_id, $capa, $type, time(), $plot]);
                $novos_stream_ids[] = (int) $pdo->lastInsertId();
                $relatorio_lote[$tipo_grupo][$cat_nome][] = $icone_item . " " . $nome; 
            } catch (Exception $e) {
                $pdo->prepare("INSERT INTO streams (stream_display_name, stream_source, category_id, stream_icon, type, added) VALUES (?, ?, ?, ?, ?, ?)")->execute([$nome, $link, $cat_id, $capa, $type, time()]);
                $novos_stream_ids[] = (int) $pdo->lastInsertId();
                $relatorio_lote[$tipo_grupo][$cat_nome][] = $icone_item . " " . $nome; 
            }
        }
    }
    
    // =========================================================================
    // SALVAMENTO EM TEMPO REAL NO BOUQUET A CADA LOTE DE 200
    // =========================================================================
    if (!empty($bouquets_sel)) {
        foreach ($bouquets_sel as $bq_id) {
            $row_bq = $pdo->query("SELECT * FROM bouquets WHERE id = ".intval($bq_id))->fetch(PDO::FETCH_ASSOC);
            if ($row_bq) {
                $colunas_bq = array_keys($row_bq);
                
                // 1. Salvar Canais e VOD
                if (!empty($novos_stream_ids)) {
                    $atuais_canais = [];
                    $bq_val = $row_bq['bouquet_channels'];
                    if (!empty($bq_val) && $bq_val !== 'null' && $bq_val !== '[]') {
                        $dec = json_decode($bq_val, true);
                        if (is_array($dec)) { $atuais_canais = $dec; } 
                        else {
                            $str = str_replace(['[', ']', '"', "'", ' '], '', $bq_val);
                            if (!empty($str)) $atuais_canais = explode(',', $str);
                        }
                    }
                    
                    $merged_c = array_unique(array_merge($atuais_canais, $novos_stream_ids));
                    $clean_c = [];
                    foreach($merged_c as $v) { if((int)$v > 0) $clean_c[] = (int)$v; }
                    $json_c = json_encode(array_values($clean_c));
                    
                    $pdo->prepare("UPDATE bouquets SET bouquet_channels = ? WHERE id = ?")->execute([$json_c, $bq_id]);
                }
                
                // 2. Salvar Séries
                if (in_array('bouquet_series', $colunas_bq) && !empty($novas_series_ids)) {
                    $atuais_series = [];
                    $srs_val = $row_bq['bouquet_series'];
                    if (!empty($srs_val) && $srs_val !== 'null' && $srs_val !== '[]') {
                        $dec_s = json_decode($srs_val, true);
                        if (is_array($dec_s)) { $atuais_series = $dec_s; } 
                        else {
                            $str_s = str_replace(['[', ']', '"', "'", ' '], '', $srs_val);
                            if (!empty($str_s)) $atuais_series = explode(',', $str_s);
                        }
                    }
                    
                    $merged_s = array_unique(array_merge($atuais_series, $novas_series_ids));
                    $clean_s = [];
                    foreach($merged_s as $v) { if((int)$v > 0) $clean_s[] = (int)$v; }
                    $json_s = json_encode(array_values($clean_s));
                    
                    $pdo->prepare("UPDATE bouquets SET bouquet_series = ? WHERE id = ?")->execute([$json_s, $bq_id]);
                }
            }
        }
    }
    // =========================================================================

    echo json_encode([
        'status' => 'success', 
        'logs' => $log_msgs, 
        'relatorio' => $relatorio_lote
    ]);
    exit;
}

// =========================================================================

$bouquets_disponiveis = $pdo->query("SELECT id, bouquet_name FROM bouquets ORDER BY bouquet_name ASC")->fetchAll(PDO::FETCH_ASSOC);

$mensagem = "";
$categorias = $_SESSION['categorias_temp'] ?? [];
$is_importing = false;
$itens_js = [];

// --- ETAPA 1: LER LISTA E SALVAR EM ARQUIVO TEMP ---
if (isset($_POST['ler_lista'])) {
    $conteudo_m3u = "";
    if (!empty($_POST['m3u_url'])) { 
        $conteudo_m3u = @file_get_contents($_POST['m3u_url']); 
    } elseif (!empty($_FILES['m3u_file']['tmp_name'])) { 
        $conteudo_m3u = file_get_contents($_FILES['m3u_file']['tmp_name']); 
    } elseif (!empty($_POST['m3u_text'])) {
        $conteudo_m3u = trim($_POST['m3u_text']);
    }

    if ($conteudo_m3u) {
        preg_match_all('/group-title="(.*?)"/i', $conteudo_m3u, $matches);
        $categorias_encontradas = array_unique($matches[1]);
        sort($categorias_encontradas);
        
        $tmp_file = sys_get_temp_dir() . '/m3u_import_' . $user_id_logado . '.txt';
        file_put_contents($tmp_file, $conteudo_m3u);
        
        $_SESSION['temp_m3u_file'] = $tmp_file;
        $_SESSION['categorias_temp'] = $categorias_encontradas;
        header("Location: importar.php?status=loaded"); exit;
    } else { 
        $mensagem = "<div class='alert error' style='color:#e74c3c; padding:10px;'>Erro ao ler a lista. Verifique o conteúdo, link ou arquivo.</div>"; 
    }
}

if (isset($_GET['status']) && $_GET['status'] == 'loaded') {
    $mensagem = "<div class='alert success' style='color:#2ecc71; padding:10px;'>Lista M3U carregada com sucesso! Selecione e renomeie as Categorias.</div>";
}

// --- ETAPA 2: PREPARA PARA AJAX E FAZ O RENAME ---
if (isset($_POST['importar_agora'])) {
    $bouquets_sel = $_POST['bouquets_sel'] ?? [];
    
    // Logica de renomeação de categorias
    $selecionadas_indices = array_keys($_POST['categorias_sel'] ?? []);
    $originais = $_POST['categorias_orig'] ?? [];
    $renomeadas = $_POST['categorias_rename'] ?? [];
    
    $selecionadas_nomes_originais = [];
    $dicionario_renomeacao = []; // Ex: ['Canais A' => 'Tv Aberta']
    
    foreach ($selecionadas_indices as $idx) {
        if (isset($originais[$idx])) {
            $nome_original = $originais[$idx];
            $selecionadas_nomes_originais[] = $nome_original;
            
            // Se o cara apagou o nome, mantém o original, senão usa o que ele digitou
            $nome_novo = !empty($renomeadas[$idx]) ? trim($renomeadas[$idx]) : $nome_original;
            $dicionario_renomeacao[$nome_original] = $nome_novo;
        }
    }
    
    $conteudo = "";
    if (isset($_SESSION['temp_m3u_file']) && file_exists($_SESSION['temp_m3u_file'])) {
        $conteudo = file_get_contents($_SESSION['temp_m3u_file']);
    }

    if ($conteudo && !empty($selecionadas_nomes_originais)) {
        unset($_SESSION['tmdb_cache_import']);

        $itens_para_processar = [];
        $linhas = explode("\n", str_replace("\r", "", $conteudo));
        $extinf_atual = ""; $nome_atual = ""; $cat_atual = "";

        foreach ($linhas as $linha) {
            $linha = trim($linha);
            if (empty($linha)) continue;

            if (strpos($linha, '#EXTINF') === 0) {
                $extinf_atual = $linha;
                $partes = explode(',', $linha);
                $nome_atual = trim(end($partes));
                
                if (preg_match('/group-title="(.*?)"/i', $linha, $match_cat)) {
                    $cat_atual = trim($match_cat[1]);
                } else {
                    $cat_atual = "";
                }
            } 
            elseif (strpos($linha, '#EXTGRP:') === 0) {
                if (empty($cat_atual)) $cat_atual = trim(substr($linha, 8));
            } 
            elseif (strpos($linha, '#') !== 0) { 
                if (!empty($extinf_atual) && !empty($linha)) {
                    
                    // Verifica se essa categoria original foi marcada para importar
                    if (in_array($cat_atual, $selecionadas_nomes_originais)) {
                        
                        // Troca o nome original pelo nome renomeado na tela
                        $categoria_final_para_banco = $dicionario_renomeacao[$cat_atual];
                        
                        $itens_para_processar[] = [
                            'cat' => $categoria_final_para_banco,
                            'nome' => $nome_atual,
                            'link' => $linha,
                            'extinf' => $extinf_atual
                        ];
                    }
                }
                $extinf_atual = ""; $nome_atual = ""; $cat_atual = "";
            }
        }

        if (count($itens_para_processar) > 0) {
            $is_importing = true;
            $itens_js = json_encode($itens_para_processar);
            $bouquets_js = json_encode($bouquets_sel);
            
            // LIMPEZA DA SESSÃO 
            if (isset($_SESSION['temp_m3u_file']) && file_exists($_SESSION['temp_m3u_file'])) {
                @unlink($_SESSION['temp_m3u_file']);
                unset($_SESSION['temp_m3u_file']);
            }
            unset($_SESSION['categorias_temp']);
        } else {
            $mensagem = "<div class='alert error' style='color:#e74c3c; padding:10px;'>Nenhum link válido encontrado nas categorias selecionadas.</div>";
        }
    } else {
        $mensagem = "<div class='alert error' style='color:#e74c3c; padding:10px;'>Sessão expirada ou nenhuma categoria marcada.</div>";
    }
}

if (isset($_GET['clean']) && $_GET['clean'] == 1) {
    if (isset($_SESSION['temp_m3u_file']) && file_exists($_SESSION['temp_m3u_file'])) {
        @unlink($_SESSION['temp_m3u_file']); unset($_SESSION['temp_m3u_file']);
    }
    unset($_SESSION['categorias_temp']);
    unset($_SESSION['tmdb_cache_import']);
    header("Location: importar.php"); exit;
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>Importador - <?php echo htmlspecialchars($nome_painel); ?></title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        :root { 
            --bg: #0f1114; 
            --sidebar: #1a1d21; 
            --card: #1e2227; 
            --accent: <?php echo $cor_primaria; ?>; 
            --border: #2c3138; 
            --text: #d1d5da; 
            --success: #2ecc71; 
            --danger: #e74c3c;
            --warning: #f39c12;
        }
        body { margin: 0; font-family: 'Segoe UI', sans-serif; background: var(--bg); color: var(--text); display: flex; height: 100vh; overflow: hidden; }

        .sidebar { width: 260px; background: var(--sidebar); border-right: 1px solid var(--border); display: flex; flex-direction: column; flex-shrink: 0; transition: 0.3s; z-index: 1001; }
        .sidebar-header { padding: 25px; text-align: center; font-size: 20px; font-weight: bold; color: white; border-bottom: 1px solid var(--border); }
        .sidebar-header span { color: var(--accent); }
        .user-info { padding: 20px; border-bottom: 1px solid var(--border); text-align: center; }
        
        .menu-list { flex: 1; overflow-y: auto; }
        .menu-item { padding: 12px 25px; color: #aeb6c0; text-decoration: none; display: flex; align-items: center; border-left: 3px solid transparent; cursor: pointer; }
        .menu-item:hover, .menu-item.active { background: #24282d; color: white; border-left-color: var(--accent); }
        .menu-item i { margin-right: 15px; width: 20px; text-align: center; }
        .menu-item.active i:first-child { color: var(--accent); } 

        .main { flex: 1; overflow-y: auto; display: flex; flex-direction: column; position: relative; }
        .topbar { background: var(--sidebar); padding: 15px 20px; border-bottom: 1px solid var(--border); display: flex; align-items: center; justify-content: space-between; }
        
        .mode-badge { padding: 6px 15px; background: rgba(40, 167, 69, 0.15); color: var(--success); border-radius: 20px; font-size: 12px; font-weight: bold; border: 1px solid var(--success); }

        .content-area { padding: 20px; flex: 1; width: 100%; box-sizing: border-box; }
        .card { background: var(--card); border-radius: 10px; padding: 20px; border: 1px solid var(--border); width: 100%; box-sizing: border-box; }

        .btn { padding: 12px; border-radius: 6px; border: none; cursor: pointer; font-weight: bold; color: white; width: 100%; margin-top: 10px; transition:0.2s;}
        .btn-blue { background: var(--accent); }
        .btn-green { background: var(--success); }
        .btn-red { background: var(--danger); }
        .btn-orange { background: var(--warning); color: black;}
        .btn:hover { filter: brightness(1.2); }
        
        .btn-small { background: #2c3138; color: #d1d5da; border: 1px solid #4a515a; padding: 5px 10px; border-radius: 4px; cursor: pointer; font-size: 11px; font-weight: bold; transition: 0.2s; }
        .btn-small:hover { background: #3d444d; color: white; }
        
        input[type="text"], input[type="file"], textarea { width: 100%; padding: 12px; background: #121519; border: 1px solid var(--border); color: white; border-radius: 6px; margin-bottom: 10px; box-sizing: border-box; }
        
        .help-text { font-size: 12px; color: var(--text-muted); margin-top: -5px; margin-bottom: 20px; display: block; line-height: 1.4; }
        .help-text i { color: var(--info, #3498db); margin-right: 4px; }
        
        .cat-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; max-height: 250px; overflow-y: auto; background: #121519; padding: 10px; border-radius: 6px; border: 1px solid var(--border); margin-bottom: 15px; }
        .cat-item { display: flex; align-items: center; font-size: 13px; cursor: pointer; }
        .cat-item input { margin-right: 8px; cursor: pointer; }
        .flex-between { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
        .flex-between h4 { margin: 0; }

        /* NOVO ESTILO PARA A GRADE DE RENOMEAR CATEGORIAS */
        .cat-grid-rename { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 10px; max-height: 400px; overflow-y: auto; background: #121519; padding: 15px; border-radius: 6px; border: 1px solid var(--border); margin-bottom: 15px; }
        .cat-item-rename { display: flex; align-items: center; gap: 10px; background: #1a1d21; padding: 8px; border: 1px solid #2c3138; border-radius: 5px; }
        .cat-item-rename input[type="checkbox"] { width: 18px; height: 18px; cursor: pointer; accent-color: var(--accent); margin:0; flex-shrink: 0;}
        .cat-item-rename input[type="text"] { flex: 1; margin: 0; padding: 8px 10px; font-size: 13px; font-weight:bold; border: 1px solid #3a4149; background:#121519; color:white; border-radius:4px; }
        .cat-item-rename input[type="text"]:focus { border-color: var(--accent); outline:none; }

        .sidebar-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.6); z-index: 1000; }
        .logout-btn { padding: 15px; background-color: #dc3545; color: white; text-align: center; text-decoration: none; font-weight: bold; }

        .progress-wrapper { background: #121519; border-radius: 6px; overflow: hidden; margin: 15px 0; border: 1px solid #2c3138; flex-shrink: 0; }
        .progress-bar { height: 25px; background: var(--accent); width: 0%; transition: width 0.1s linear; display: flex; align-items: center; justify-content: center; color: white; font-weight: bold; font-size: 12px; }
        .log-screen { background: #000; color: #0f0; font-family: monospace; padding: 10px; height: 300px; overflow-y: auto; border-radius: 6px; border: 1px solid #2c3138; font-size: 12px; line-height: 1.4; word-wrap: break-word; white-space: pre-wrap; }
        .log-screen span.info { color: #0ea5e9; }
        .log-screen span.tmdb { color: #f59e0b; }
        .log-screen span.success { color: #2ecc71; }

        .report-area { display: none; margin-top: 15px; }
        .report-textarea { width: 100%; height: 150px; background: #121519; border: 1px solid var(--border); color: #d1d5da; border-radius: 6px; padding: 10px; font-family: monospace; font-size: 13px; box-sizing: border-box; resize: none; margin-bottom: 10px; }
        .report-textarea:focus { outline: none; border-color: var(--accent); }
        .report-actions { display: flex; gap: 10px; }
        .btn-zap { background: #25D366; color: white; padding: 12px 24px; border: none; border-radius: 6px; cursor: pointer; text-decoration: none; font-weight: bold; text-align: center; flex: 1; display: flex; align-items: center; justify-content: center; gap: 8px; }
        
        .controls { display: flex; gap: 10px; margin-top: 10px;}

        @media (max-width: 768px) {
            .sidebar { position: fixed; left: -260px; height: 100%; }
            .sidebar.active { left: 0; }
            .sidebar-overlay.active { display: block; }
            .content-area { padding: 15px; }
            .cat-grid { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); }
            .cat-grid-rename { grid-template-columns: 1fr; }
            .controls { flex-direction: column; }
        }
        
        .submenu { display: none; background: #16191d; list-style: none; padding: 0; margin: 0; }
        .submenu .menu-item { padding-left: 52px; font-size: 14px; border-left: none; }
        .arrow-icon { margin-left: auto; transition: 0.3s; font-size: 12px; }
        .rotate { transform: rotate(180deg); }
        .menu-category { padding: 20px 20px 8px; font-size: 11px; text-transform: uppercase; color: #8a94a1; font-weight: bold; letter-spacing: 1px; }
    </style>
</head>
<body>
    <div class="sidebar-overlay" id="overlay"></div>
    <nav class="sidebar" id="sidebar">
        <div class="sidebar-header">
            <?php if(!empty($logo_url) && file_exists($logo_url)): ?>
                <img src="<?php echo htmlspecialchars($logo_url); ?>" alt="Logo" style="max-width: 180px; max-height: 60px; object-fit: contain;">
            <?php else: ?>
                <?php echo htmlspecialchars($nome_painel); ?>
            <?php endif; ?>
        </div>
        <div class="user-info">
            <div style="font-size:14px;">Olá, <b><?php echo $nome_usuario; ?></b></div>
            <div style="color:var(--success); font-size:12px; margin-top:5px;">Saldo: <?php echo $user_credits ?? '0'; ?></div>
        </div>
        
        <div class="menu-list">
            <a href="dashboard.php" class="menu-item active"><i class="fas fa-chart-line"></i> Dashboard</a>
            <a href="perfil.php" class="menu-item active"><i class="fas fa-user-circle"></i> Meu Perfil</a>
            
            <a href="lancamentos.php" class="menu-item active"><i class="fas fa-fire"></i> Últimos Adicionados</a>
            
            <a href="ajuda.php" class="menu-item active"><i class="fas fa-question-circle"></i> Material de Ajuda</a>
            <a href="meus_links.php" class="menu-item active"><i class="fas fa-link" style="color: var(--accent);"></i> Central de Links</a>
            
            <div class="menu-category">Gestão</div>
            <a href="clientes.php" class="menu-item active"><i class="fas fa-users"></i> Clientes IPTV</a>
            <a href="testes.php" class="menu-item active"><i class="fas fa-vial"></i> Gerenciar Testes</a>
            <a href="online.php" class="menu-item active"><i class="fas fa-plug"></i> Clientes Online</a>
            <a href="revendedores.php" class="menu-item active"><i class="fas fa-user-tie"></i> Revendedores</a>
            <a href="migrar_clientes.php" class="menu-item active"><i class="fas fa-exchange-alt"></i> Migrar Clientes</a>
            <a href="logs_creditos.php" class="menu-item active"><i class="fas fa-list-alt"></i> Extrato de Créditos</a>
            <a href="marketing.php" class="menu-item active"><i class="fas fa-bullhorn"></i> Central de Marketing</a>
            
            
            <div class="menu-category">Clientes P2P</div>
            <a href="p2p_clientes.php" class="menu-item active"><i class="fas fa-tv"></i> Clientes P2P</a>
            
            <?php if (!empty($api_conf['api_binstream_url'])): ?>
                <a href="binstream_p2p.php" class="menu-item active"><i class="fas fa-tv"></i> Binstream P2P</a>
            <?php endif; ?>

 <?php if($role === 'admin'): ?>
<div class="menu-category">Gerar Licença</div>
<a href="admin_licencas.php" class="menu-item active"> <i class="fas fa-key" style="color: #28a745;"></i> <span>Gerador SaaS</span> </a>
<?php endif; ?>

<div class="menu-category">Api WhatsApp</div>
                <a href="integracoes_api_whatsapp.php" class="menu-item active"><i class="fas fa-plug"></i> Integrações API WhatsApp</a>


            <div class="menu-category">Integração & Cobrança</div>
            <a href="pagamentos.php" class="menu-item active"><i class="fas fa-dollar-sign"></i> Pagamento Automático</a>
            <a href="cobranca.php" class="menu-item active"><i class="fas fa-comment-dollar"></i> Central de Cobrança</a>
            <a href="admin_planos.php" class="menu-item active"><i class="fas fa-tags"></i> Meus Planos de Venda</a>
            <a href="comprar_creditos.php" class="menu-item active"><i class="fas fa-shopping-cart"></i> Comprar Créditos</a>
          
            <div class="menu-item active" onclick="toggleSubmenu('appsSub')">
                <i class="fas fa-rocket"></i><span>Aplicações</span><i class="fas fa-chevron-down arrow-icon" id="arrow-appsSub"></i>

            </div>
            <div class="submenu" id="appsSub">
                <a href="loja_apps.php" class="menu-item active"><i class="fas fa-store"></i> Loja de Aplicativos</a>
                <?php if($role === 'admin'): ?>
                    <a href="admin_loja.php" class="menu-item active"><i class="fas fa-cogs"></i> Gerenciar Loja</a>
                <?php endif; ?>
                <a href="chatbot.php" class="menu-item active"><i class="fab fa-whatsapp"></i> Chatbot Automático</a>
            </div>
           <a href="admin_player_revenda.php" class="menu-item active"><i class="fas fa-play-circle"></i> WebPlayer</a>
            
   <div class="menu-category">Segurança</div>
            <a href="historico_logins.php" class="menu-item active"><i class="fas fa-shield-alt"></i> Sessões Ativas</a>

            <?php if($role === 'admin'): ?>
                <div class="menu-category">Administração</div>
                <a href="admin_monitor.php" class="menu-item active"><i class="fas fa-heartbeat"></i> Monitor do Servidor</a>
                <a href="admin_template.php" class="menu-item active"><i class="fas fa-edit"></i> Editor de Template</a>
                <a href="admin_token.php" class="menu-item active"><i class="fas fa-user-secret"></i> Token Links Xui</a>
                <a href="admin_lb.php" class="menu-item active"><i class="fas fa-server"></i> Load Balancers</a>
                <a href="guia_cloudflare.php" class="menu-item active"><i class="fas fa-cloud"></i> Guia Cloudflare</a>
                 <a href="admin_loja_creditos.php" class="menu-item active"><i class="fas fa-store"></i> Configurar Loja (PIX)</a>
                 <a href="integracoes_api.php" class="menu-item active"><i class="fas fa-plug"></i> Integrações API</a>
                 <a href="admin_robo.php" class="menu-item active"><i class="fas fa-robot"></i> Robô de Cobrança</a>
                 <a href="admin_anti_bloqueio.php" class="menu-item active"><i class="fas fa-bolt"></i> Botão de Pânico</a>
                 <a href="admin_anti_fraude.php" class="menu-item active"><i class="fas fa-user-secret"></i> Radar Anti-Fraude</a>  
                 <a href="admin_watchdog.php" class="menu-item active"><i class="fas fa-dog"></i> Watchdog LB</a>  
                 
                 <a href="admin_epg_sync.php" class="menu-item active">
        <i class="fas fa-clock"></i> Sincronizar EPG
    </a>
    

 <div class="menu-item active" onclick="toggleSubmenu('painelSub')">
                    <i class="fas fa-desktop"></i><span>Painel</span><i class="fas fa-chevron-down arrow-icon" id="arrow-painelSub"></i>
                </div>
                <div class="submenu" id="painelSub">
                    <a href="personalizacao.php" class="menu-item active"><i class="fas fa-paint-brush"></i> Personalização</a>
                </div>
             
                <div class="menu-item active" onclick="toggleSubmenu('adminSub')">
                    <i class="fas fa-toolbox"></i><span>Ferramentas</span><i class="fas fa-chevron-down arrow-icon" id="arrow-adminSub"></i>
                </div>
                <div class="submenu" id="adminSub">
                    <a href="importar.php" class="menu-item active"><i class="fas fa-file-import"></i> Importador</a>
                    <a href="importar3.php" class="menu-item active"><i class="fas fa-file-import"></i> Importador Turbo</a>
                    <a href="dns_manager.php" class="menu-item active"><i class="fas fa-link"></i> Alterar DNS</a>
                    <a href="admin_logos.php" class="menu-item active"><i class="fas fa-image"></i> Alterar Logos</a>
                    <a href="mover_conteudos.php" class="menu-item active"><i class="fas fa-exchange-alt"></i> Mover Conteúdos</a>
                    <a href="limpeza.php" class="menu-item active"><i class="fas fa-trash-alt"></i> Limpeza de Dados</a>
                    <a href="limpar_duplicados.php" class="menu-item active"><i class="fas fa-copy"></i> Limpeza de Duplicados</a>
                    <a href="backup.php" class="menu-item active"><i class="fas fa-database"></i> Backup do Sistema</a>
                    <a href="seguranca.php" class="menu-item active"><i class="fas fa-shield-alt"></i> Sistema de Segurança</a>
                    <a href="configuracoes.php" class="menu-item active"><i class="fas fa-tools"></i> Configurações</a>
                </div>

                 <?php if($role === 'admin'): ?>
    <div class="menu-category">Financeiro</div>
     <!-- NOVO MENU FINANCEIRO COM SUBMENU -->
            <div class="menu-item active" onclick="toggleSubmenu('finSub')">
                <i class="fas fa-hand-holding-usd"></i><span>Financeiro</span><i class="fas fa-chevron-down arrow-icon rotate" id="arrow-finSub"></i>
            </div>
            <div class="submenu" id="finSub" style="display: block;">
                <a href="financeiro.php" class="menu-item active">Faturamento</a>
            </div>
    
    <?php endif; ?>

                <div class="menu-category">Conteúdos</div>
                <a href="categorias.php" class="menu-item active"><i class="fas fa-folder-open"></i><span>Categorias</span></a>
                <div class="menu-item active" onclick="toggleSubmenu('contentSub')">
                    <i class="fas fa-layer-group"></i><span>Mídias</span><i class="fas fa-chevron-down arrow-icon" id="arrow-contentSub"></i>
                </div>
                <div class="submenu" id="contentSub">
                    <a href="bouquets.php" class="menu-item active">Editar Bouquets</a>
                    <a href="canais.php" class="menu-item active">Canais Ao Vivo</a>
                    <a href="filmes.php" class="menu-item active">Filmes (VOD)</a>
                    <a href="series.php" class="menu-item active">Séries</a>
                </div>
                 <a href="admin_autofix_vod.php" class="menu-item active"><i class="fas fa-magic"></i> Auto-Fix TMDB</a>
            <?php endif; ?>
        </div>
        <a href="logout.php" class="logout-btn"><i class="fas fa-power-off"></i> Sair</a>
    </nav>

    <div class="main">
        <header class="topbar">
            <button onclick="toggleMenu()" style="background:none; border:none; color:white; font-size:20px; cursor:pointer;"><i class="fas fa-bars"></i></button>
            <h3 style="margin:0; font-size:16px;">Importador Inteligente</h3>
            
            <div class="topbar-right">
                <span class="mode-badge"><i class="fas fa-database"></i> <?php echo defined('MODO_SISTEMA') ? strtoupper(MODO_SISTEMA) : 'INTERNO'; ?></span>
            </div>
        </header>

        <div class="content-area">
            <?php echo $mensagem; ?>
            
            <?php if ($is_importing): ?>
                <div class="card" id="processingCard">
                    <h2 style="margin-top:0"><i class="fas fa-cloud-download-alt"></i> Importação em Andamento</h2>
                    <p style="font-size:13px; color:var(--text-muted)">Processando fila de itens. Use os botões abaixo se precisar interromper.</p>
                    
                    <div class="progress-wrapper">
                        <div class="progress-bar" id="pb">0%</div>
                    </div>
                    
                    <div class="controls">
                        <button id="btnPause" class="btn btn-orange" onclick="togglePause()"><i class="fas fa-pause"></i> PAUSAR</button>
                        <button class="btn btn-red" onclick="cancelar()"><i class="fas fa-times"></i> CANCELAR TUDO</button>
                    </div>

                    <div class="log-screen" id="log" style="margin-top:15px;"></div>
                    
                    <div class="report-area" id="report-area">
                        <textarea id="report-text" class="report-textarea" readonly></textarea>
                        <div class="report-actions">
                            <button class="btn btn-blue" onclick="copiarRelatorio()"><i class="fas fa-copy"></i> Copiar Relatório</button>
                            <button class="btn btn-zap" onclick="enviarWhatsApp()"><i class="fab fa-whatsapp"></i> Enviar WhatsApp</button>
                        </div>
                    </div>

                    <div id="btn-voltar" style="display:none; margin-top:15px;">
                        <a href="importar.php?clean=1" class="btn btn-blue" style="display:block; text-align:center; text-decoration:none;">Voltar para o Início</a>
                    </div>
                </div>

                <script>
                    const allItems = <?php echo $itens_js; ?>;
                    const bouquetsSel = <?php echo $bouquets_js; ?>;
                    const total = allItems.length;
                    
                    const batchSize = 200; 
                    
                    let currentIndex = 0;
                    let isPaused = false;
                    let isCancelled = false;
                    
                    let relatorioFinal = {
                        'FILMES': {},
                        'SÉRIES': {},
                        'CANAIS AO VIVO': {}
                    };

                    const pb = document.getElementById('pb');
                    const logEl = document.getElementById('log');
                    const btnPause = document.getElementById('btnPause');

                    function updateLog(msg) {
                        logEl.innerHTML += msg + '<br>';
                        logEl.scrollTop = logEl.scrollHeight;
                    }

                    function togglePause() {
                        isPaused = !isPaused;
                        if (isPaused) {
                            btnPause.innerHTML = '<i class="fas fa-play"></i> RETOMAR';
                            btnPause.className = 'btn btn-green';
                            updateLog("<span class='warning'>[PAUSADO] Importação suspensa.</span>");
                        } else {
                            btnPause.innerHTML = '<i class="fas fa-pause"></i> PAUSAR';
                            btnPause.className = 'btn btn-orange';
                            updateLog("<span class='success'>[RETOMADO] Continuando a importação...</span>");
                            processarLote();
                        }
                    }

                    function cancelar() {
                        if(confirm("Deseja realmente cancelar a importação? O que já foi salvo não será apagado.")) {
                            isCancelled = true;
                            updateLog("<span class='danger'>[CANCELADO] Processo interrompido pelo usuário.</span>");
                            finalizarProcesso();
                        }
                    }

                    async function processarLote() {
                        if (isPaused || isCancelled) return;

                        if (currentIndex >= total) {
                            finalizarProcesso();
                            return;
                        }

                        let lote = allItems.slice(currentIndex, currentIndex + batchSize);
                        
                        try {
                            const res = await fetch('?ajax_import=1', {
                                method: 'POST',
                                headers: { 'Content-Type': 'application/json' },
                                body: JSON.stringify({ itens: lote, bouquets: bouquetsSel })
                            });
                            
                            const data = await res.json();
                            
                            if (data.status === 'success') {
                                data.logs.forEach(msg => updateLog(msg));
                                
                                for (let group in data.relatorio) {
                                    for (let cat in data.relatorio[group]) {
                                        if (!relatorioFinal[group][cat]) relatorioFinal[group][cat] = [];
                                        relatorioFinal[group][cat] = relatorioFinal[group][cat].concat(data.relatorio[group][cat]);
                                    }
                                }
                            }

                        } catch (e) {
                            updateLog("<span class='danger'>[ERRO DE CONEXÃO] Tentando continuar no próximo lote...</span>");
                        }

                        currentIndex += batchSize;
                        let pct = Math.min(100, Math.floor((currentIndex / total) * 100)); 
                        pb.style.width = pct + '%';
                        pb.innerText = pct + '%';

                        if (!isPaused && !isCancelled) {
                            setTimeout(processarLote, 10); 
                        }
                    }

                    async function finalizarProcesso() {
                        pb.style.width = '100%';
                        pb.innerText = '100%';
                        updateLog('<br><span class="success" style="font-size:14px;"><b>✓ IMPORTAÇÃO CONCLUÍDA!</b></span>');
                        
                        fetch('?clean_tmdb_cache=1');
                        
                        let txt = "Atualização conteúdos do dia: " + new Date().toLocaleDateString() + "\n\n";
                        for (let group in relatorioFinal) {
                            if (Object.keys(relatorioFinal[group]).length > 0) {
                                txt += "[" + group + "]\n\n";
                                for (let cat in relatorioFinal[group]) {
                                    txt += "📁 " + cat + "\n\n";
                                    relatorioFinal[group][cat].forEach(i => txt += i + "\n");
                                    txt += "\n";
                                }
                            }
                        }

                        document.getElementById('report-area').style.display = 'block';
                        document.getElementById('report-text').value = txt.trim();
                        document.getElementById('btn-voltar').style.display = 'block';
                        
                        document.querySelector('.controls').style.display = 'none';
                    }

                    function copiarRelatorio() {
                        var txt = document.getElementById('report-text');
                        txt.select(); document.execCommand('copy');
                        alert('Relatório copiado com sucesso!');
                    }

                    function enviarWhatsApp() {
                        var txt = document.getElementById('report-text').value;
                        window.open('https://api.whatsapp.com/send?text=' + encodeURIComponent(txt), '_blank');
                    }

                    setTimeout(processarLote, 1000);
                </script>

            <?php else: ?>
                <div class="card">
                    <?php if (empty($categorias)): ?>
                        <form method="POST" enctype="multipart/form-data">
                            <label>Link M3U</label>
                            <input type="text" name="m3u_url" placeholder="http://...">
                            <span class="help-text"><i class="fas fa-info-circle"></i> Cole o link direto fornecido pelo seu servidor. Ideal para importar o catálogo completo de forma automática.</span>
                            
                            <label>Ou Arquivo</label>
                            <input type="file" name="m3u_file">
                            <span class="help-text"><i class="fas fa-info-circle"></i> Selecione um arquivo .m3u salvo no seu dispositivo. Ótimo para listas offline ou backups locais.</span>
                            
                            <label>Ou Cole o Texto M3U</label>
                            <textarea name="m3u_text" placeholder="#EXTM3U..." style="width: 100%; padding: 12px; background: #121519; border: 1px solid var(--border); color: white; border-radius: 6px; margin-bottom: 10px; box-sizing: border-box; resize: vertical; min-height: 120px;"></textarea>
                            <span class="help-text"><i class="fas fa-info-circle"></i> Cole diretamente o código da lista. Perfeito para edições rápidas ou para testar poucos canais.</span>
                            
                            <button type="submit" name="ler_lista" class="btn btn-blue">CARREGAR LISTA</button>
                        </form>
                    <?php else: ?>
                        <form method="POST">
                            <div class="flex-between">
                                <h4>1. Escolha os Bouquets</h4>
                                <button type="button" class="btn-small" onclick="toggleAllBq()">Marcar / Desmarcar Todos</button>
                            </div>
                            <div class="cat-grid">
                                <?php foreach ($bouquets_disponiveis as $bq): ?>
                                    <label class="cat-item"><input type="checkbox" name="bouquets_sel[]" value="<?php echo $bq['id']; ?>" class="bq-checkbox"> <?php echo $bq['bouquet_name']; ?></label>
                                <?php endforeach; ?>
                            </div>

                            <div class="flex-between" style="margin-top: 20px;">
                                <h4>2. Escolha e Renomeie as Categorias</h4>
                                <button type="button" class="btn-small" onclick="toggleAllCats()">Marcar / Desmarcar Todas</button>
                            </div>
                            
                            <div class="cat-grid-rename">
                                <?php foreach ($categorias as $i => $cat): ?>
                                    <div class="cat-item-rename">
                                        <input type="checkbox" name="categorias_sel[<?php echo $i; ?>]" value="1" class="cat-checkbox">
                                        <input type="hidden" name="categorias_orig[<?php echo $i; ?>]" value="<?php echo htmlspecialchars($cat); ?>">
                                        <input type="text" name="categorias_rename[<?php echo $i; ?>]" value="<?php echo htmlspecialchars($cat); ?>" title="Altere o nome aqui se desejar renomear a categoria ao importar">
                                    </div>
                                <?php endforeach; ?>
                            </div>
                            
                            <button type="submit" name="importar_agora" class="btn btn-green" style="margin-top:10px;"><i class="fas fa-play-circle"></i> INICIAR IMPORTAÇÃO</button>
                            <a href="importar.php?clean=1" class="btn btn-red" style="text-align:center; display:block; text-decoration:none; margin-top:10px;"><i class="fas fa-times-circle"></i> CANCELAR E VOLTAR</a>
                        </form>
                    <?php endif; ?>
                </div>
            <?php endif; ?>
        </div>
        <?php include 'rodape.php'; ?>
    </div>

    <script>
        function toggleMenu() {
            document.getElementById('sidebar').classList.toggle('active');
            document.getElementById('overlay').classList.toggle('active');
        }
        document.getElementById('overlay').onclick = toggleMenu;

        function toggleAllBq() {
            let checkboxes = document.querySelectorAll('.bq-checkbox');
            let allChecked = Array.from(checkboxes).every(c => c.checked);
            checkboxes.forEach(c => c.checked = !allChecked);
        }

        function toggleAllCats() {
            let checkboxes = document.querySelectorAll('.cat-checkbox');
            let allChecked = Array.from(checkboxes).every(c => c.checked);
            checkboxes.forEach(c => c.checked = !allChecked);
        }

        function toggleSubmenu(id) {
            const sub = document.getElementById(id);
            const arrow = document.getElementById('arrow-' + id);
            if (sub.style.display === "block") {
                sub.style.display = "none";
                if(arrow) arrow.classList.remove('rotate');
            } else {
                sub.style.display = "block";
                if(arrow) arrow.classList.add('rotate');
            }
        }
    </script>
</body>
</html>
