<?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(); // Banco Principal
$pdo_int = getConexaoInterna(); // Banco Local

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

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

// ====================================================================
// INTELIGÊNCIA ARTIFICIAL: DETECTA SE É XUI ONE OU XTREAM UI
// ====================================================================
$modo_ativo = 'interno';
try {
    $modo_ativo = $pdo_int->query("SELECT modo_ativo FROM configuracoes LIMIT 1")->fetchColumn() ?: 'interno';
} catch (Exception $e) {}

// DESCOBRE DINAMICAMENTE AS TABELAS CORRETAS NO BANCO
$tabela_series = 'series';
$tabela_categorias = 'stream_categories';
$tabela_episodios = 'series_episodes';
$col_sort = 'sort';

if ($modo_ativo === 'xui') {
    $col_sort = 'episode_num';
    try { 
        $pdo->query("SELECT 1 FROM streams_categories LIMIT 1"); 
        $tabela_categorias = 'streams_categories'; 
    } catch (Exception $e) { 
        try { 
            $pdo->query("SELECT 1 FROM categories LIMIT 1"); 
            $tabela_categorias = 'categories'; 
        } catch (Exception $e2) { 
            $tabela_categorias = 'stream_categories'; 
        }
    }
    try { $pdo->query("SELECT 1 FROM streams_series LIMIT 1"); $tabela_series = 'streams_series'; } catch (Exception $e) {}
    try { $pdo->query("SELECT 1 FROM streams_episodes LIMIT 1"); $tabela_episodios = 'streams_episodes'; } catch (Exception $e) {}
}

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

try {
    $tabela_existe = $pdo_int->query("SHOW TABLES LIKE 'painel_config'")->rowCount() > 0;
    if ($tabela_existe) {
        $config_painel = $pdo_int->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) {}

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 E COLUNAS NECESSÁRIAS COM IGNORAR ERROS
try {
    $pdo->exec("CREATE TABLE IF NOT EXISTS $tabela_series (
        id INT(11) AUTO_INCREMENT PRIMARY KEY,
        title VARCHAR(255) NOT NULL,
        category_id VARCHAR(255) NOT NULL,
        cover VARCHAR(255) NULL,
        plot TEXT NULL,
        last_modified INT(11) NULL
    )");
    $pdo->exec("ALTER TABLE streams ADD COLUMN direct_source INT(11) DEFAULT 0"); 
    $pdo->exec("ALTER TABLE streams ADD COLUMN movie_properties TEXT NULL"); 
    $pdo->exec("ALTER TABLE streams ADD COLUMN plot TEXT NULL"); 
    $pdo->exec("ALTER TABLE streams ADD COLUMN 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;
    }
    
    $stmt_config = $pdo_int->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']; 
        $nome = $item['nome'];
        $link = $item['link'];
        $extinf = $item['extinf'];
        
        $cat_nome_lower = mb_strtolower($cat_nome, 'UTF-8');
        
        $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;

        if ($is_movie_url) { $type = 2; }
        elseif ($is_series_url) { $type = 5; }
        elseif ($is_live_url) { $type = 1; }
        else {
            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; }
            elseif (preg_match('/filme/i', $cat_nome_lower) && preg_match('/s[eé]rie/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; }
            }
            elseif (preg_match('/\b(filmes?|vod|cinema|lan[çc]amentos?)\b/i', $cat_nome_lower)) { $type = 2; }
            elseif (preg_match('/\b(s[eé]ries?|novelas?)\b/i', $cat_nome_lower)) { $type = 5; }
            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; }
            }
            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) ? '📽️' : '🎬');
        
        $direct_src = 1; 

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

        $stmt_cat = $pdo->prepare("SELECT id FROM $tabela_categorias WHERE category_name = ? AND category_type = ? LIMIT 1");
        $stmt_cat->execute([$cat_nome, $cat_type_str]);
        $cat_id = $stmt_cat->fetchColumn();
        
        if (!$cat_id) {
            try {
                $pdo->prepare("INSERT INTO $tabela_categorias (category_name, category_type, parent_id, cat_order, is_adult) VALUES (?, ?, 0, 0, 0)")->execute([$cat_nome, $cat_type_str]);
                $cat_id = $pdo->lastInsertId();
            } catch (Exception $e) {
                try {
                    $pdo->prepare("INSERT INTO $tabela_categorias (category_name, category_type) VALUES (?, ?)")->execute([$cat_nome, $cat_type_str]);
                    $cat_id = $pdo->lastInsertId();
                } catch (Exception $e2) {
                    $cat_id = 0; 
                }
            }
        }

        $cat_id_stream = $cat_id;
        $cat_id_serie = $cat_id;
        if ($modo_ativo === 'xui' && $cat_id != 0) {
            try {
                $ex_stream = $pdo->query("SELECT category_id FROM streams WHERE category_id LIKE '[%' LIMIT 1")->fetchColumn();
                $cat_id_stream = ($ex_stream && strpos($ex_stream, '"') !== false) ? json_encode([strval($cat_id)]) : json_encode([(int)$cat_id]);
            } catch (Exception $e) { $cat_id_stream = json_encode([(int)$cat_id]); }
            
            try {
                $ex_serie = $pdo->query("SELECT category_id FROM $tabela_series WHERE category_id LIKE '[%' LIMIT 1")->fetchColumn();
                $cat_id_serie = ($ex_serie && strpos($ex_serie, '"') !== false) ? json_encode([strval($cat_id)]) : json_encode([(int)$cat_id]);
            } catch (Exception $e) { $cat_id_serie = json_encode([(int)$cat_id]); }
        }

        $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 $tabela_episodios 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 DE SÉRIE
        // =======================================================
        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_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 $tabela_series WHERE title = ? LIMIT 1");
            $stmt_serie->execute([$serie_title_limpo]);
            $serie_id = $stmt_serie->fetchColumn();
            
            if (!$serie_id) {
                // Inserção base da série
                $pdo->prepare("INSERT INTO $tabela_series (title, category_id, cover, last_modified) VALUES (?, ?, ?, ?)")->execute([$serie_title_limpo, $cat_id_serie, $capa, time()]);
                $serie_id = $pdo->lastInsertId();
                // Atualizações seguras (ignora erro se coluna não existir)
                try { $pdo->prepare("UPDATE $tabela_series SET plot = ? WHERE id = ?")->execute([$plot, $serie_id]); } catch(Exception $e){}
            }

            // CORREÇÃO DOS LINKS: Só transforma em Array se for XUI, senão o Xtream UI zera a caixinha visualmente
            $link_banco = ($modo_ativo === 'xui' && substr($link, 0, 1) !== '[') ? json_encode([$link], JSON_UNESCAPED_SLASHES) : $link;
            
            $props_json = json_encode(['plot' => $plot, 'movie_image' => $capa, 'cover_big' => $capa, 'description' => $plot, 'name' => $nome], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
            
            // INSERÇÃO BASE: Garantido que existe em todos os painéis
            $pdo->prepare("INSERT INTO streams (stream_display_name, stream_source, category_id, stream_icon, type, added) VALUES (?, ?, ?, ?, ?, ?)")->execute([$nome, $link_banco, $cat_id_stream, $capa, 5, time()]);
            $episode_stream_id = $pdo->lastInsertId();

            // ATUALIZAÇÃO SEGURA METADADOS: Atira para todos os lados. Se a coluna existir, salva, senão ignora e não quebra.
            try { $pdo->prepare("UPDATE streams SET direct_source = ? WHERE id = ?")->execute([$direct_src, $episode_stream_id]); } catch(Exception $e){}
            try { $pdo->prepare("UPDATE streams SET plot = ? WHERE id = ?")->execute([$plot, $episode_stream_id]); } catch(Exception $e){}
            try { $pdo->prepare("UPDATE streams SET notes = ? WHERE id = ?")->execute([$plot, $episode_stream_id]); } catch(Exception $e){}
            try { $pdo->prepare("UPDATE streams SET movie_propeties = ? WHERE id = ?")->execute([$props_json, $episode_stream_id]); } catch(Exception $e){} // Xtream UI Typo
            try { $pdo->prepare("UPDATE streams SET movie_properties = ? WHERE id = ?")->execute([$props_json, $episode_stream_id]); } catch(Exception $e){}
            
            try {
                $pdo->prepare("INSERT INTO $tabela_episodios (season_num, series_id, stream_id, $col_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;
            
        } 
        // =======================================================
        // INSERÇÃO DE CANAL E FILME
        // =======================================================
        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;
            
            // CORREÇÃO DOS LINKS: Só transforma em Array se for XUI, senão o Xtream UI zera a caixinha visualmente
            $link_banco = ($modo_ativo === 'xui' && substr($link, 0, 1) !== '[') ? json_encode([$link], JSON_UNESCAPED_SLASHES) : $link;
            
            $props_json = json_encode(['plot' => $plot, 'movie_image' => $capa, 'cover_big' => $capa, 'description' => $plot, 'name' => $nome], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
            
            // INSERÇÃO BASE: Garantido que existe em todos os painéis
            $pdo->prepare("INSERT INTO streams (stream_display_name, stream_source, category_id, stream_icon, type, added) VALUES (?, ?, ?, ?, ?, ?)")->execute([$nome, $link_banco, $cat_id_stream, $capa, $type, time()]);
            $new_stream_id = $pdo->lastInsertId();

            // ATUALIZAÇÃO SEGURA METADADOS: Atira para todos os lados. Se a coluna existir, salva, senão ignora e não quebra.
            try { $pdo->prepare("UPDATE streams SET direct_source = ? WHERE id = ?")->execute([$direct_src, $new_stream_id]); } catch(Exception $e){}
            try { $pdo->prepare("UPDATE streams SET plot = ? WHERE id = ?")->execute([$plot, $new_stream_id]); } catch(Exception $e){}
            try { $pdo->prepare("UPDATE streams SET notes = ? WHERE id = ?")->execute([$plot, $new_stream_id]); } catch(Exception $e){}
            try { $pdo->prepare("UPDATE streams SET movie_propeties = ? WHERE id = ?")->execute([$props_json, $new_stream_id]); } catch(Exception $e){} // Xtream UI Typo
            try { $pdo->prepare("UPDATE streams SET movie_properties = ? WHERE id = ?")->execute([$props_json, $new_stream_id]); } catch(Exception $e){}

            $novos_stream_ids[] = (int) $new_stream_id;
            $relatorio_lote[$tipo_grupo][$cat_nome][] = $icone_item . " " . $nome; 
        }
    }
    
    // =========================================================================
    // SALVAMENTO EM TEMPO REAL NO BOUQUET A CADA LOTE
    // =========================================================================
    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);
                
                if ($modo_ativo === 'xui') {
                    $c_bq = []; $m_bq = []; $s_bq = [];
                    $c_exist = json_decode($row_bq['bouquet_channels'] ?? '[]', true) ?: [];
                    $m_exist = json_decode($row_bq['bouquet_movies'] ?? '[]', true) ?: [];
                    $s_exist = json_decode($row_bq['bouquet_series'] ?? '[]', true) ?: [];
                    
                    $mapa_tipos = [];
                    $all_streams = $pdo->query("SELECT id, type FROM streams")->fetchAll(PDO::FETCH_ASSOC);
                    foreach($all_streams as $s) { $mapa_tipos[$s['id']] = (int)$s['type']; }
                    
                    foreach($novos_stream_ids as $sid) {
                        $t = $mapa_tipos[$sid] ?? 1;
                        if ($t == 1 || $t == 3 || $t == 4) $c_bq[] = $sid;
                        elseif ($t == 2) $m_bq[] = $sid;
                    }
                    
                    $c_final = array_unique(array_merge($c_exist, $c_bq));
                    $m_final = array_unique(array_merge($m_exist, $m_bq));
                    $s_final = array_unique(array_merge($s_exist, $novas_series_ids));
                    
                    $pdo->prepare("UPDATE bouquets SET bouquet_channels=?, bouquet_movies=?, bouquet_series=? WHERE id=?")
                        ->execute([json_encode(array_values($c_final)), json_encode(array_values($m_final)), json_encode(array_values($s_final)), $bq_id]);
                        
                } else {
                    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[] = (string)$v; }
                        $json_c = json_encode(array_values($clean_c));
                        $pdo->prepare("UPDATE bouquets SET bouquet_channels = ? WHERE id = ?")->execute([$json_c, $bq_id]);
                    }
                    
                    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[] = (string)$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 = [];

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>";
}

if (isset($_POST['importar_agora'])) {
    $bouquets_sel = $_POST['bouquets_sel'] ?? [];
    $selecionadas_indices = array_keys($_POST['categorias_sel'] ?? []);
    $originais = $_POST['categorias_orig'] ?? [];
    $renomeadas = $_POST['categorias_rename'] ?? [];
    $selecionadas_nomes_originais = [];
    $dicionario_renomeacao = [];
    
    foreach ($selecionadas_indices as $idx) {
        if (isset($originais[$idx])) {
            $nome_original = $originais[$idx];
            $selecionadas_nomes_originais[] = $nome_original;
            $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)) {
                    if (in_array($cat_atual, $selecionadas_nomes_originais)) {
                        $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);
            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>
    <link rel="stylesheet" href="tema.css">
    <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);}
        .sidebar-logo{width:100%;max-width:180px;height:auto;max-height:60px;object-fit:contain;display:block;margin:0 auto;}
        
        .user-info{padding:20px;border-bottom:1px solid var(--border);text-align:center;}
        .user-info .badge { background: rgba(0, 123, 255, 0.2); color: var(--accent); padding: 4px 10px; border-radius: 4px; font-size: 11px; text-transform: uppercase; font-weight: bold; margin-top: 5px; display: inline-block; }
        .credits-badge { display: block; margin-top: 10px; color: var(--success); font-weight: bold; font-size: 13px; }
        
        .menu-list{flex:1;overflow-y:auto;list-style:none;padding:0;margin:0;}
        .menu-category{padding:20px 20px 8px;font-size:11px;text-transform:uppercase;color:#8a94a1;font-weight:bold;letter-spacing:1px;}
        .menu-item{padding:14px 20px;color:#aeb6c0;text-decoration:none;display:flex;align-items:center;cursor:pointer;transition:0.2s;font-size:15px;border-left:3px solid transparent;}
        .menu-item i:first-child{margin-right:12px;width:20px;text-align:center;color:#8a94a1;}
        .menu-item:hover,.menu-item.active{background:#2c3138;color:white;border-left-color:var(--accent);}
        .menu-item.active i:first-child{color:var(--accent);}
        .submenu{display:none;background:#16191d;list-style:none;padding:0;margin:0;}
        .submenu .menu-item{padding-left:52px;font-size:13px;border-left:none;}
        .arrow-icon{margin-left:auto;transition:0.3s;font-size:11px;}
        .rotate{transform:rotate(180deg);}
        .logout-btn{padding:15px;background-color:#dc3545;color:white;text-align:center;text-decoration:none;font-weight:bold;margin-top:auto;}
        
        .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;}
        .menu-toggle{display:none;background:none;border:none;color:white;font-size:24px;cursor:pointer;padding:5px;}
        .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;}
        .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;}
        .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;}
            .menu-toggle{display:block;margin-right:15px;}
            .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;}
        }
    </style>
</head>
<body>
    <div class="sidebar-overlay" id="overlay" onclick="toggleMenu()"></div>
    
    <?php include 'sidebar.php'; ?>

    <div class="main">
        <header class="topbar">
            <div style="display:flex; align-items:center;">
                <button class="menu-toggle" onclick="toggleMenu()"><i class="fas fa-bars"></i></button>
                <h3 style="margin:0; font-size:16px; color:white;">Importador Inteligente</h3>
            </div>
            
            <div class="topbar-right">
                <span class="mode-badge"><i class="fas fa-database"></i> <?php echo defined('MODO_SISTEMA') ? strtoupper(MODO_SISTEMA) : strtoupper($modo_ativo); ?></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 htmlspecialchars($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>
    <script src="tema.js"></script>
</body>
</html>
