<?php
ob_start();
ini_set('display_errors', 0); // Oculta erros na tela para não quebrar o layout
// --- CORREÇÃO DE MEMÓRIA PARA CATEGORIAS GIGANTES DE FILMES ---
ini_set('memory_limit', '-1'); 
set_time_limit(0);

session_start();
require_once 'config.php'; 

$pdo = getConexaoAtiva();

// Proteção: Somente Administradores
if (!isset($_SESSION['user_id']) || $_SESSION['user_role'] !== 'admin') { 
    header("Location: login.php"); exit; 
}

$nome_usuario = $_SESSION['username'] ?? 'Usuário';
$role = $_SESSION['user_role'];
$user_id_logado = $_SESSION['user_id'];

// Busca créditos do usuário para o menu lateral
try {
    $user_credits = $pdo->query("SELECT credits FROM reg_users WHERE id = " . intval($user_id_logado))->fetchColumn() ?: 0;
} catch (Exception $e) { 
    $user_credits = 0; 
}

// ==========================================
// 1. REQUISIÇÃO AJAX: BUSCAR ITENS DA CATEGORIA
// ==========================================
if (isset($_GET['ajax_get_items'])) {
    error_reporting(0); 
    while (ob_get_level() > 0) { ob_end_clean(); } 
    
    header('Content-Type: application/json; charset=utf-8');
    header('Cache-Control: no-cache, no-store, must-revalidate'); 
    header('Pragma: no-cache');
    header('Expires: 0');
    
    $cat_id = intval($_GET['cat_id']);
    $type = $_GET['cat_type'] ?? 'stream'; 

    try {
        if ($type === 'series') {
            $stmt = $pdo->prepare("SELECT id, title as name FROM series WHERE category_id = ? ORDER BY title ASC");
        } else {
            $stmt = $pdo->prepare("SELECT id, stream_display_name as name FROM streams WHERE category_id = ? ORDER BY stream_display_name ASC");
        }
        $stmt->execute([$cat_id]);
        $resultados = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        // CORREÇÃO ANTI-FALHA DE JSON: Limpa caracteres corrompidos que vêm de listas M3U e quebram a tela
        foreach ($resultados as &$r) {
            $r['name'] = mb_convert_encoding($r['name'] ?? '', 'UTF-8', 'UTF-8');
        }
        
        $json = json_encode(['status' => 'success', 'data' => $resultados]);
        
        if ($json === false) {
             echo json_encode(['status' => 'error', 'message' => 'Erro interno ao processar texto dos filmes.']);
        } else {
             echo $json;
        }

    } catch (Exception $e) {
        echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);
    }
    exit; 
}

// ==========================================
// 2. PROCESSAR A MUDANÇA EM MASSA
// ==========================================
$msg = "";
if (isset($_POST['mover_items'])) {
    $dest_cat_id = intval($_POST['dest_category']);
    $item_ids = $_POST['item_ids'] ?? [];
    $cat_type = $_POST['cat_type'] ?? 'stream';

    if (!empty($item_ids) && $dest_cat_id > 0) {
        try {
            $inQuery = implode(',', array_fill(0, count($item_ids), '?'));
            $params = array_merge([$dest_cat_id], $item_ids);

            if ($cat_type === 'series') {
                $sql = "UPDATE series SET category_id = ? WHERE id IN ($inQuery)";
            } else {
                $sql = "UPDATE streams SET category_id = ? WHERE id IN ($inQuery)";
            }

            $stmt = $pdo->prepare($sql);
            $stmt->execute($params);
            
            $qtd = count($item_ids);
            $msg = "<div class='alert success'><i class='fas fa-check-circle'></i> <b>Sucesso!</b> $qtd conteúdo(s) movido(s) para a nova categoria.</div>";
        } catch (Exception $e) {
            $msg = "<div class='alert danger'><i class='fas fa-times-circle'></i> <b>Erro:</b> " . $e->getMessage() . "</div>";
        }
    } else {
        $msg = "<div class='alert danger'><i class='fas fa-exclamation-triangle'></i> Selecione a categoria de destino e pelo menos um conteúdo.</div>";
    }
}

// ==========================================
// 3. BUSCAR TODAS AS CATEGORIAS PARA OS MENUS
// ==========================================
$cat_canais = [];
$cat_filmes = [];
try {
    $stmtC = $pdo->query("SELECT id, category_name FROM stream_categories WHERE category_type = 'live' ORDER BY category_name ASC");
    $cat_canais = $stmtC->fetchAll(PDO::FETCH_ASSOC);

    $stmtF = $pdo->query("SELECT id, category_name FROM stream_categories WHERE category_type = 'movie' ORDER BY category_name ASC");
    $cat_filmes = $stmtF->fetchAll(PDO::FETCH_ASSOC);
} catch(Exception $e) {}

$cat_series = [];
try {
    $stmtS = $pdo->query("SELECT id, category_name FROM stream_categories WHERE category_type = 'series' ORDER BY category_name ASC");
    $cat_series = $stmtS->fetchAll(PDO::FETCH_ASSOC);
    
    if (empty($cat_series)) {
        $stmtS2 = $pdo->query("SELECT id, category_name FROM series_categories ORDER BY category_name ASC");
        $cat_series = $stmtS2->fetchAll(PDO::FETCH_ASSOC);
    }
} catch(Exception $e) {
    try {
        $stmtS2 = $pdo->query("SELECT id, category_name FROM series_categories ORDER BY category_name ASC");
        $cat_series = $stmtS2->fetchAll(PDO::FETCH_ASSOC);
    } catch (Exception $ex) {}
}

?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mover Conteúdos - TOP IPTV</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        :root { --bg-dark: #121519; --bg-sidebar: #1e2227; --bg-card: #272c33; --text-main: #d1d5da; --text-muted: #8a94a1; --accent: #007bff; --border-color: #3a4149; --success: #28a745; }
        body { margin: 0; font-family: 'Segoe UI', sans-serif; background-color: var(--bg-dark); color: var(--text-main); display: flex; height: 100vh; overflow: hidden; }
        
        .sidebar { width: 260px; background-color: var(--bg-sidebar); display: flex; flex-direction: column; transition: 0.3s; border-right: 1px solid var(--border-color); z-index: 1001; }
        .sidebar-header { padding: 25px 20px; text-align: center; font-size: 22px; font-weight: bold; color: white; border-bottom: 1px solid var(--border-color); }
        .sidebar-header span { color: var(--accent); }
        .user-info { padding: 20px; text-align: center; border-bottom: 1px solid var(--border-color); }
        .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; }
        .user-info .credits-badge { display: block; margin-top: 10px; color: var(--success); font-weight: bold; font-size: 13px; }
        .menu-list { list-style: none; padding: 0; margin: 0; overflow-y: auto; flex: 1; }
        .menu-item { padding: 14px 20px; color: var(--text-main); text-decoration: none; display: flex; align-items: center; transition: 0.2s; border-left: 3px solid transparent; font-size: 15px; cursor: pointer; }
        .menu-item i:first-child { margin-right: 12px; width: 20px; text-align: center; color: var(--text-muted); }
        .menu-item:hover, .menu-item.active { background-color: #2c3138; color: white; border-left-color: var(--accent); }
        
        .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: var(--text-muted); font-weight: bold; letter-spacing: 1px; }
        .logout-btn { padding: 15px; background-color: #dc3545; color: white; text-align: center; text-decoration: none; font-weight: bold; }
        
        .main-content { flex: 1; display: flex; flex-direction: column; overflow-y: auto; }
        .topbar { display: flex; justify-content: space-between; align-items: center; padding: 15px 30px; background-color: var(--bg-sidebar); border-bottom: 1px solid var(--border-color); }
        
        .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); white-space: nowrap; display: inline-block; }
        
        .content-area { padding: 30px; flex: 1; max-width: 1000px; margin: 0 auto; width: 100%; box-sizing: border-box; }
        .section-title { font-size: 16px; color: white; text-transform: uppercase; font-weight: bold; border-bottom: 1px solid var(--border-color); padding-bottom: 10px; margin: 10px 0 20px 0; display: flex; align-items: center; gap: 8px; }
        
        .card { background: var(--bg-card); padding: 25px; border-radius: 10px; border: 1px solid var(--border-color); margin-bottom: 25px; }
        label { color: var(--text-muted); font-size: 13px; margin-bottom: 8px; display: block; font-weight: bold; }
        select { width: 100%; padding: 14px; background: #121519; border: 1px solid var(--border-color); color: white; border-radius: 6px; margin-bottom: 20px; font-family: inherit; font-size: 14px; cursor: pointer; }
        select:focus { outline: none; border-color: var(--accent); }
        
        .items-container { max-height: 400px; overflow-y: auto; background: #121519; border: 1px solid var(--border-color); border-radius: 6px; padding: 10px; display: none; }
        .item-row { padding: 10px; border-bottom: 1px solid #222; display: flex; align-items: center; gap: 10px; transition: 0.2s; }
        .item-row:hover { background: #1a1e23; }
        .item-row:last-child { border-bottom: none; }
        .item-row input[type="checkbox"] { width: 18px; height: 18px; cursor: pointer; accent-color: var(--accent); }
        .item-row label { margin-bottom: 0; color: white; cursor: pointer; flex: 1; font-weight: normal; }
        
        .check-all-box { padding: 15px; background: #1a1e23; border: 1px solid var(--border-color); border-radius: 6px; margin-bottom: 15px; display: none; align-items: center; gap: 10px; }
        .check-all-box input { width: 18px; height: 18px; cursor: pointer; accent-color: var(--success); }
        .check-all-box label { margin: 0; color: var(--success); cursor: pointer; font-weight: bold; }

        .btn { padding: 14px 25px; border-radius: 6px; border: none; font-weight: bold; cursor: pointer; transition: 0.2s; font-family: inherit; font-size: 14px; display: flex; align-items: center; justify-content: center; gap: 10px; }
        .btn-green { background: var(--success); color: white; width: 100%; }
        .btn-green:hover { background: #218838; }
        .btn-green:disabled { background: #555; cursor: not-allowed; color: #888; }
        
        .alert { padding: 15px; border-radius: 6px; margin-bottom: 20px; font-size: 14px; }
        .alert.success { background: rgba(40,167,69,0.1); color: var(--success); border: 1px solid var(--success); }
        .alert.danger { background: rgba(220,53,69,0.1); color: #dc3545; border: 1px solid #dc3545; }
        
        .loading-text { color: var(--accent); display: none; font-weight: bold; padding: 20px; text-align: center; }

        optgroup { font-weight: bold; color: var(--accent); background: #1a1e23; }
        option { color: white; background: #121519; font-weight: normal; }
        
        .menu-toggle { display: none; background: none; border: none; color: white; font-size: 24px; cursor: pointer; }
        .sidebar-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 1000; }
        .footer { background-color: var(--bg-sidebar); border-top: 1px solid var(--border-color); padding: 20px 30px; text-align: center; color: var(--text-muted); font-size: 13px; font-weight: 500; margin-top: auto; }
        .footer span { color: var(--accent); font-weight: bold; }

        @media (max-width: 768px) { 
            .sidebar { position: fixed; left: -260px; height: 100%; } 
            .sidebar.active { left: 0; } 
            .menu-toggle { display: block; margin-right: 15px; } 
            .sidebar-overlay.active { display: block; } 
            .topbar { padding: 15px 20px; justify-content: flex-start; gap: 10px; } 
            .topbar-right { margin-left: auto; } 
            .topbar h2 { font-size: 16px !important; line-height: 1.2; }
        }
    </style>
</head>
<body>
    <div class="sidebar-overlay" id="overlay"></div>
    <nav class="sidebar" id="sidebar">
        <div class="sidebar-header">TOP <span>IPTV</span></div>
        <div class="user-info">
            <div style="color:white; font-size: 14px;">Olá, <strong><?php echo htmlspecialchars($nome_usuario); ?></strong></div>
            <span class="badge">Administrador</span>
            <div class="credits-badge"><i class="fas fa-coins"></i> Saldo: <?php echo number_format($user_credits, 1); ?></div>
        </div>
        <div class="menu-list">
            <a href="dashboard.php" class="menu-item"><i class="fas fa-chart-line"></i> Dashboard</a>
            
            <div class="menu-category">Gestão</div>
            <a href="clientes.php" class="menu-item"><i class="fas fa-users"></i> Clientes IPTV</a>
            <a href="testes.php" class="menu-item"><i class="fas fa-vial"></i> Gerenciar Testes</a>
            <a href="revendedores.php" class="menu-item"><i class="fas fa-user-tie"></i> Revendedores</a>

            <?php if($role === 'admin'): ?>
                <div class="menu-category">Administração</div>
                <a href="importar.php" class="menu-item"><i class="fas fa-file-import"></i> Importador</a>
                <a href="limpeza.php" class="menu-item"><i class="fas fa-trash-alt"></i> Limpeza de Dados</a>
                <a href="configuracoes.php" class="menu-item"><i class="fas fa-tools"></i> Configurações</a>
                <a href="dns_manager.php" class="menu-item"><i class="fas fa-link"></i> Alterar DNS</a>
                
                <a href="mover_conteudos.php" class="menu-item active"><i class="fas fa-exchange-alt"></i> Mover Conteúdos</a>

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

    <div class="main-content">
        <header class="topbar">
            <button class="menu-toggle" id="btn-menu"><i class="fas fa-bars"></i></button>
            <h2 style="margin:0; font-size: 18px; color:white;">Organizador de Categorias</h2>
            <div class="topbar-right">
                <span class="mode-badge"><i class="fas fa-database"></i> MODO: <?php echo defined('MODO_SISTEMA') ? strtoupper(MODO_SISTEMA) : 'ATIVO'; ?></span>
            </div>
        </header>

        <div class="content-area">
            <div class="section-title"><i class="fas fa-folder-open"></i> Mover Canais, Filmes e Séries em Massa</div>
            
            <?php echo $msg; ?>
            
            <form method="POST" id="formMover">
                <div class="card">
                    <label><i class="fas fa-sign-out-alt"></i> 1. SELECIONE A CATEGORIA DE ORIGEM</label>
                    <select id="source_cat" required>
                        <option value="">-- Selecione uma categoria --</option>
                        
                        <optgroup label="📺 CANAIS AO VIVO">
                            <?php foreach($cat_canais as $c): ?>
                                <option value="<?php echo $c['id']; ?>" data-type="stream"><?php echo htmlspecialchars($c['category_name']); ?></option>
                            <?php endforeach; ?>
                        </optgroup>
                        
                        <optgroup label="🎬 FILMES (VOD)">
                            <?php foreach($cat_filmes as $c): ?>
                                <option value="<?php echo $c['id']; ?>" data-type="stream"><?php echo htmlspecialchars($c['category_name']); ?></option>
                            <?php endforeach; ?>
                        </optgroup>
                        
                        <optgroup label="🎞️ SÉRIES">
                            <?php foreach($cat_series as $c): ?>
                                <option value="<?php echo $c['id']; ?>" data-type="series"><?php echo htmlspecialchars($c['category_name']); ?></option>
                            <?php endforeach; ?>
                        </optgroup>
                    </select>

                    <div id="loading" class="loading-text"><i class="fas fa-spinner fa-spin"></i> Buscando conteúdos...</div>
                    
                    <div class="check-all-box" id="checkAllBox">
                        <input type="checkbox" id="checkAll">
                        <label for="checkAll">Selecionar todos os conteúdos desta categoria</label>
                    </div>

                    <div class="items-container" id="itemsContainer">
                        </div>
                </div>

                <div class="card" id="destCard" style="display: none;">
                    <label><i class="fas fa-sign-in-alt"></i> 2. SELECIONE A NOVA CATEGORIA (DESTINO)</label>
                    
                    <input type="hidden" name="cat_type" id="form_cat_type" value="stream">

                    <select name="dest_category" id="dest_cat" required>
                        <option value="">-- Selecione o destino --</option>
                    </select>

                    <button type="submit" name="mover_items" class="btn btn-green" id="btnSubmit" disabled>
                        <i class="fas fa-exchange-alt"></i> MOVER CONTEÚDOS SELECIONADOS
                    </button>
                </div>
            </form>
        </div>
        
        <footer class="footer">
            &copy; <?php echo date('Y'); ?> <span>TOP IPTV</span> - Painel de Gerenciamento Inteligente. Todos os direitos reservados.
        </footer>
    </div>

    <script>
        const btnMenu = document.getElementById('btn-menu');
        const sidebar = document.getElementById('sidebar');
        const overlay = document.getElementById('overlay');
        
        function toggleMenu() { 
            sidebar.classList.toggle('active'); 
            overlay.classList.toggle('active'); 
        }

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

        if(btnMenu) btnMenu.addEventListener('click', toggleMenu); 
        if(overlay) overlay.addEventListener('click', toggleMenu);

        const sourceSelect = document.getElementById('source_cat');
        const destSelect = document.getElementById('dest_cat');
        const itemsContainer = document.getElementById('itemsContainer');
        const checkAllBox = document.getElementById('checkAllBox');
        const checkAllInput = document.getElementById('checkAll');
        const loading = document.getElementById('loading');
        const formCatType = document.getElementById('form_cat_type');
        const destCard = document.getElementById('destCard');
        const btnSubmit = document.getElementById('btnSubmit');

        sourceSelect.addEventListener('change', function() {
            const cat_id = this.value;
            
            if (!cat_id) {
                itemsContainer.style.display = 'none';
                checkAllBox.style.display = 'none';
                destCard.style.display = 'none';
                return;
            }

            const cat_type = this.options[this.selectedIndex].getAttribute('data-type');
            const optgroupLabel = this.options[this.selectedIndex].parentElement.label;
            
            formCatType.value = cat_type; 
            
            destSelect.innerHTML = '<option value="">-- Selecione o destino --</option>';
            Array.from(sourceSelect.querySelectorAll('optgroup')).forEach(group => {
                if(group.label === optgroupLabel) {
                    destSelect.innerHTML += group.outerHTML;
                }
            });

            loading.style.display = 'block';
            itemsContainer.style.display = 'none';
            checkAllBox.style.display = 'none';
            destCard.style.display = 'none';
            itemsContainer.innerHTML = '';
            checkAllInput.checked = false;

            const urlBusca = window.location.pathname + `?ajax_get_items=1&cat_id=${cat_id}&cat_type=${cat_type}`;

            fetch(urlBusca)
                .then(async response => {
                    const text = await response.text();
                    try {
                        return JSON.parse(text);
                    } catch (e) {
                        alert("O SERVIDOR NÃO ENVIOU A LISTA. ELE RESPONDEU COM ESTE ERRO:\n\n" + text.substring(0, 300));
                        throw new Error("Erro no Formato JSON");
                    }
                })
                .then(res => {
                    loading.style.display = 'none';
                    
                    if (res.status === 'success' && res.data.length > 0) {
                        let html = '';
                        res.data.forEach(item => {
                            html += `
                                <div class="item-row">
                                    <input type="checkbox" name="item_ids[]" value="${item.id}" id="item_${item.id}" class="item-checkbox">
                                    <label for="item_${item.id}"><i class="fas fa-play-circle" style="color:var(--text-muted); margin-right:5px;"></i> ${item.name}</label>
                                </div>
                            `;
                        });
                        
                        itemsContainer.innerHTML = html;
                        itemsContainer.style.display = 'block';
                        checkAllBox.style.display = 'flex';
                        destCard.style.display = 'block';
                        
                        document.querySelectorAll('.item-checkbox').forEach(cb => {
                            cb.addEventListener('change', validateForm);
                        });
                    } else {
                        itemsContainer.innerHTML = '<div style="padding:15px; color:var(--text-muted);">Nenhum conteúdo encontrado nesta categoria.</div>';
                        itemsContainer.style.display = 'block';
                    }
                    validateForm();
                })
                .catch(err => {
                    loading.style.display = 'none';
                    if (err.message !== "Erro no Formato JSON") {
                        alert('Falha na rede ou conexão recusada pelo servidor.');
                    }
                });
        });

        checkAllInput.addEventListener('change', function() {
            const checkboxes = document.querySelectorAll('.item-checkbox');
            checkboxes.forEach(cb => {
                cb.checked = this.checked;
            });
            validateForm();
        });

        function validateForm() {
            const anyChecked = document.querySelectorAll('.item-checkbox:checked').length > 0;
            const destSelected = destSelect.value !== "";
            
            if (anyChecked && destSelected) {
                btnSubmit.disabled = false;
            } else {
                btnSubmit.disabled = true;
            }
        }

        destSelect.addEventListener('change', validateForm);

        document.getElementById('formMover').addEventListener('submit', function(e) {
            const qtd = document.querySelectorAll('.item-checkbox:checked').length;
            if(!confirm(`Você tem certeza que deseja mover ${qtd} conteúdo(s)? Essa ação não pode ser desfeita.`)) {
                e.preventDefault();
            }
        });
    </script>
</body>
</html>
