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

$mensagem = '';
$jogos = json_decode(file_get_contents('../dados/jogos.json'), true) ?? [];

// Mapeia extensão -> console padrão
function consoleDeExtensao($extensao) {
    $mapa = [
        'nes' => 'NES',
        'fds' => 'NES',
        'smc' => 'SNES',
        'sfc' => 'SNES',
        'gen' => 'Mega Drive',
        'md' => 'Mega Drive',
        'sms' => 'Master System',
        'gg' => 'Master System',
        'zip' => 'Arcade',
        'a26' => 'Arcade',
        'gb' => 'Game Boy',
        'gbc' => 'Game Boy',
        'gba' => 'Game Boy',
        'pce' => 'TurboGrafx',
    ];
    return $mapa[strtolower($extensao)] ?? '';
}

// Sugere nome a partir do nome do arquivo (limpa extensão, underscores e números padrão)
function sugerirNome($nomeArquivo) {
    $nome = pathinfo($nomeArquivo, PATHINFO_FILENAME);
    // Remove extensões internas de zip (ex: game.smc.zip -> game)
    if (preg_match('/\.(nes|fds|smc|sfc|gen|md|sms|gg|gb|gbc|gba|a26|pce|bin|zip)$/i', $nome, $m)) {
        $nome = substr($nome, 0, -strlen($m[1]) - 1);
    }
    // Limpa sufixos comuns de ROMs
    $nome = preg_replace('/\[(.*?)\]|\(.*?\)|\{.*?\}/', '', $nome);
    $nome = preg_replace('/_(Rev|Translation|Demo|Japan|USA|Europe|Brazil|World|v[0-9]+).*$/i', '', $nome);
    $nome = str_replace(['_', '-', '.'], ' ', $nome);
    $nome = preg_replace('/\s+/', ' ', trim($nome));
    // Capitaliza palavras
    $nome = ucwords(strtolower($nome));
    return $nome ?: 'Jogo';
}

// Capa padrão do console
function capaPadrao($console) {
    $mapa = [
        'NES' => 'capas/nes.png',
        'SNES' => 'capas/snes.png',
        'Mega Drive' => 'capas/mega.png',
        'Master System' => 'capas/mastersystem.png',
        'Arcade' => 'capas/arcade.png',
        'Game Boy' => 'capas/nes.png',
        'TurboGrafx' => 'capas/arcade.png',
    ];
    return $mapa[$console] ?? 'capas/nes.png';
}

// Processar upload da ROM
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['adicionar'])) {
    $nome = $_POST['nome'] ?? '';
    $console = $_POST['console'] ?? '';
    $categoria = $_POST['categoria'] ?? '';

    if (isset($_FILES['rom']) && $_FILES['rom']['error'] === UPLOAD_ERR_OK) {
        $arquivo = $_FILES['rom'];
        $extensao = strtolower(pathinfo($arquivo['name'], PATHINFO_EXTENSION));

        // Extensões permitidas
        $permissoes = ['nes', 'fds', 'smc', 'sfc', 'gen', 'md', 'sms', 'gg', 'zip', 'gb', 'gbc', 'gba', 'a26', 'pce', 'bin'];

        if (in_array($extensao, $permissoes)) {
            // Se o console não foi escolhido, detecta automaticamente pela extensão
            if (!$console) {
                $console = consoleDeExtensao($extensao);
            }

            // Se o nome ficou vazio, sugere a partir do arquivo
            if (!$nome) {
                $nome = sugerirNome($arquivo['name']);
            }

            // Garante pasta de uploads
            $pastaUploads = '../dados/uploads';
            if (!is_dir($pastaUploads)) {
                mkdir($pastaUploads, 0777, true);
            }

            $nomeArquivo = uniqid() . '.' . $extensao;
            $destino = $pastaUploads . '/' . $nomeArquivo;

            if (move_uploaded_file($arquivo['tmp_name'], $destino)) {
                // Capa: preferida enviada pelo usuário, senão capa padrão do console
                $capaArquivo = null;
                if (isset($_FILES['capa']) && $_FILES['capa']['error'] === UPLOAD_ERR_OK) {
                    $capaExt = strtolower(pathinfo($_FILES['capa']['name'], PATHINFO_EXTENSION));
                    if (in_array($capaExt, ['jpg', 'jpeg', 'png', 'webp', 'gif'])) {
                        $pastaCapas = '../dados/capas';
                        if (!is_dir($pastaCapas)) {
                            mkdir($pastaCapas, 0777, true);
                        }
                        $capaArquivo = uniqid() . '.' . $capaExt;
                        move_uploaded_file($_FILES['capa']['tmp_name'], $pastaCapas . '/' . $capaArquivo);
                    }
                }

                $jogos[] = [
                    'id' => uniqid(),
                    'nome' => $nome,
                    'console' => $console,
                    'categoria' => $categoria,
                    'arquivo' => $nomeArquivo,
                    'capa' => $capaArquivo,
                    'capa_padrao' => capaPadrao($console),
                    'data_upload' => date('d/m/Y H:i')
                ];

                file_put_contents('../dados/jogos.json', json_encode($jogos, JSON_PRETTY_PRINT));
                $mensagem = '✅ Jogo adicionado com sucesso!';
            } else {
                $mensagem = '❌ Erro ao fazer upload do arquivo.';
            }
        } else {
            $mensagem = '❌ Extensão não permitida. Use: ' . implode(', ', $permissoes);
        }
    } else {
        $mensagem = '❌ Envie o arquivo da ROM.';
    }
}

// Excluir jogo
if (isset($_GET['excluir'])) {
    $id = $_GET['excluir'];
    foreach ($jogos as $key => $jogo) {
        if ($jogo['id'] === $id) {
            $caminho = '../dados/uploads/' . $jogo['arquivo'];
            if (file_exists($caminho)) {
                unlink($caminho);
            }
            if (!empty($jogo['capa']) && file_exists('../dados/capas/' . $jogo['capa'])) {
                unlink('../dados/capas/' . $jogo['capa']);
            }
            unset($jogos[$key]);
            break;
        }
    }
    $jogos = array_values($jogos);
    file_put_contents('../dados/jogos.json', json_encode($jogos, JSON_PRETTY_PRINT));
    $mensagem = '🗑️ Jogo removido!';
}

// Detecta console pela extensão para o campo oculto do formulário (melhora UX)
$romSelecionado = $_POST['nome_rom_detect'] ?? $_FILES['rom']['name'] ?? '';
$consoleDetectado = $romSelecionado ? consoleDeExtensao(strtolower(pathinfo($romSelecionado, PATHINFO_EXTENSION))) : '';
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Gerenciar Jogos</title>
    <link rel="stylesheet" href="css/estilo.css">
    <style>
        .grid-jogos-admin {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
            gap: 20px;
            margin-top: 15px;
        }
        .card-jogo-admin {
            background: white;
            border-radius: 15px;
            overflow: hidden;
            box-shadow: var(--sombra);
            transition: 0.3s;
            text-align: center;
        }
        .card-jogo-admin:hover {
            transform: translateY(-6px);
        }
        .card-jogo-admin img {
            width: 100%;
            height: 260px;
            object-fit: cover;
            display: block;
        }
        .card-jogo-admin .info {
            padding: 12px;
        }
        .card-jogo-admin .nome {
            font-weight: bold;
            color: var(--azul-metalico);
            font-size: 15px;
            margin-bottom: 5px;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }
        .card-jogo-admin .console {
            color: #666;
            font-size: 13px;
            margin-bottom: 8px;
        }
        .card-jogo-admin .acoes {
            display: flex;
            justify-content: center;
            gap: 8px;
            padding-bottom: 12px;
        }
        .btn-excluir {
            color: #ff4444;
            text-decoration: none;
            font-size: 18px;
        }
        .btn-editar {
            color: var(--azul-metalico);
            text-decoration: none;
            font-size: 18px;
        }
        .auto-nome {
            font-size: 12px;
            color: #4CAF50;
            margin-top: -4px;
            margin-bottom: 8px;
        }
        .tela-lista { display: block; }
        .tela-grid { display: none; }
        .toggle-view {
            background: none;
            border: 2px solid var(--azul-metalico);
            color: var(--azul-metalico);
            padding: 8px 15px;
            border-radius: 10px;
            cursor: pointer;
            font-size: 14px;
        }
        .toggle-view.ativa {
            background: var(--azul-metalico);
            color: white;
        }
        .form-duas-colunas {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 12px;
        }
        @media (max-width: 768px) {
            .form-duas-colunas { grid-template-columns: 1fr; }
        }
    </style>
</head>
<body>
    <div class="admin-container">
        <nav class="sidebar">
            <div class="logo-sidebar"><img src="img/logo.png" alt="Logo"></div>
            <ul>
                <li><a href="index.php">📊 Dashboard</a></li>
                <li><a href="jogos.php" class="ativo">🎮 Gerenciar Jogos</a></li>
                <li><a href="clientes.php">👥 Clientes</a></li>
                <li><a href="perfil.php">⚙️ Perfil</a></li>
                <li><a href="logout.php" class="sair">🚪 Sair</a></li>
            </ul>
        </nav>

        <main class="main-content">
            <header>
                <h1>🎮 Gerenciar Jogos</h1>
                <div>
                    <button class="toggle-view ativa" id="btnTabela" onclick="mudarVista('tabela')">📋 Tabela</button>
                    <button class="toggle-view" id="btnGrid" onclick="mudarVista('grid')">🖼️ Capas</button>
                </div>
            </header>

            <?php if ($mensagem): ?>
                <div class="mensagem"><?php echo $mensagem; ?></div>
            <?php endif; ?>

            <!-- Formulário de Upload -->
            <div class="form-upload">
                <h2>Adicionar Nova ROM</h2>
                <form method="POST" enctype="multipart/form-data" id="formJogo">
                    <div class="form-duas-colunas">
                        <div>
                            <label style="font-weight:bold; color:var(--azul-metalico);">📁 Arquivo da ROM *</label>
                            <input type="file" name="rom" id="arquivoRom" accept=".nes,.fds,.smc,.sfc,.gen,.md,.sms,.gg,.zip,.gb,.gbc,.gba,.a26,.pce,.bin" required
                                   onchange="detectarROM(this)">
                            <p class="auto-nome" id="nomeSugerido"></p>
                        </div>
                        <div>
                            <label style="font-weight:bold; color:var(--azul-metalico);">🖼️ Capa do Jogo (opcional)</label>
                            <input type="file" name="capa" accept=".jpg,.jpeg,.png,.webp,.gif" onchange="previewCapa(this)">
                            <img id="previewCapaImg" style="display:none; max-height:80px; margin-top:8px; border-radius:8px;">
                        </div>
                    </div>
                    <div class="form-duas-colunas">
                        <input type="text" name="nome" id="campoNome" placeholder="Nome do Jogo (deixe vazio para sugerir automaticamente)">
                        <select name="console" id="campoConsole" required>
                            <option value="">Console (auto-detectado pelo arquivo)</option>
                            <option value="NES">NES</option>
                            <option value="SNES">SNES</option>
                            <option value="Mega Drive">Mega Drive</option>
                            <option value="Master System">Master System</option>
                            <option value="Arcade">Arcade</option>
                        </select>
                    </div>
                    <input type="text" name="categoria" placeholder="Categoria (ex: Ação, RPG)">
                    <button type="submit" name="adicionar">📤 Upload ROM</button>
                </form>
            </div>

            <!-- Lista de Jogos em Tabela -->
            <div class="lista-jogos tela-lista" id="vistaTabela">
                <h2>📚 Biblioteca de Jogos (<?php echo count($jogos); ?>)</h2>
                <table>
                    <thead>
                        <tr>
                            <th>Capa</th>
                            <th>Jogo</th>
                            <th>Console</th>
                            <th>Categoria</th>
                            <th>Data</th>
                            <th>Ações</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($jogos as $jogo): ?>
                        <tr>
                            <td><img src="<?php echo !empty($jogo['capa']) ? '../dados/capas/' . htmlspecialchars($jogo['capa']) : htmlspecialchars($jogo['capa_padrao']); ?>" 
                                     style="width:45px; height:60px; object-fit:cover; border-radius:6px;" alt="capa"></td>
                            <td><?php echo htmlspecialchars($jogo['nome']); ?></td>
                            <td><?php echo $jogo['console']; ?></td>
                            <td><?php echo $jogo['categoria'] ?? '-'; ?></td>
                            <td><?php echo $jogo['data_upload'] ?? '-'; ?></td>
                            <td>
                                <a href="?excluir=<?php echo $jogo['id']; ?>" 
                                   onclick="return confirm('Tem certeza que deseja excluir este jogo?')" 
                                   class="btn-excluir">🗑️</a>
                            </td>
                        </tr>
                        <?php endforeach; ?>
                        <?php if (empty($jogos)): ?>
                        <tr><td colspan="6">Nenhum jogo cadastrado. Faça o upload de uma ROM acima!</td></tr>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>

            <!-- Lista de Jogos com Capas -->
            <div class="tela-grid" id="vistaGrid">
                <h2>🖼️ Biblioteca de Jogos (<?php echo count($jogos); ?>)</h2>
                <div class="grid-jogos-admin">
                    <?php foreach ($jogos as $jogo): ?>
                    <div class="card-jogo-admin">
                        <img src="<?php echo !empty($jogo['capa']) ? '../dados/capas/' . htmlspecialchars($jogo['capa']) : htmlspecialchars($jogo['capa_padrao']); ?>" alt="capa">
                        <div class="info">
                            <div class="nome" title="<?php echo htmlspecialchars($jogo['nome']); ?>"><?php echo htmlspecialchars($jogo['nome']); ?></div>
                            <div class="console"><?php echo $jogo['console']; ?> <?php if (!empty($jogo['categoria'])): ?>• <?php echo $jogo['categoria']; ?><?php endif; ?></div>
                            <div class="acoes">
                                <a href="?excluir=<?php echo $jogo['id']; ?>" 
                                   onclick="return confirm('Tem certeza que deseja excluir este jogo?')" 
                                   class="btn-excluir" title="Excluir">🗑️</a>
                            </div>
                        </div>
                    </div>
                    <?php endforeach; ?>
                    <?php if (empty($jogos)): ?>
                    <div style="grid-column:1/-1; text-align:center; padding:40px; color:#666;">Nenhum jogo cadastrado.</div>
                    <?php endif; ?>
                </div>
            </div>
        </main>
    </div>

    <script>
        function mudarVista(vista) {
            document.getElementById('vistaTabela').style.display = vista === 'tabela' ? 'block' : 'none';
            document.getElementById('vistaGrid').style.display = vista === 'grid' ? 'block' : 'none';
            document.getElementById('btnTabela').classList.toggle('ativa', vista === 'tabela');
            document.getElementById('btnGrid').classList.toggle('ativa', vista === 'grid');
        }

        // Detecta console e sugere nome a partir do arquivo selecionado
        function detectarROM(input) {
            if (!input.files || !input.files[0]) return;
            var nomeArquivo = input.files[0].name;
            var ext = nomeArquivo.split('.').pop().toLowerCase();
            var nome = nomeArquivo.replace(/\.[^/.]+$/, '');
            // Remove extensões internas de zip (ex: jogo.smc.zip)
            nome = nome.replace(/\.(nes|fds|smc|sfc|gen|md|sms|gg|gb|gbc|gba|a26|pce|bin)$/i, '');
            // Limpa sufixos de ROMs
            nome = nome.replace(/\[.*?\]|\(.*?\)/g, '');
            nome = nome.replace(/_(Rev|Translation|Demo|Japan|USA|Europe|Brazil|World|v\d+).*$/i, '');
            nome = nome.replace(/[_\-\.]+/g, ' ').replace(/\s+/g, ' ').trim();
            nome = nome.toLowerCase().replace(/\b\w/g, c => c.toUpperCase());
            if (!nome) nome = 'Jogo';

            document.getElementById('campoNome').value = nome;
            document.getElementById('nomeSugerido').textContent = '✨ Nome sugerido automaticamente a partir do arquivo: ' + nome;

            // Auto-detecta console
            var mapa = {
                'nes': 'NES', 'fds': 'NES',
                'smc': 'SNES', 'sfc': 'SNES',
                'gen': 'Mega Drive', 'md': 'Mega Drive',
                'sms': 'Master System', 'gg': 'Master System',
                'zip': 'Arcade', 'a26': 'Arcade',
                'gb': 'Game Boy', 'gbc': 'Game Boy', 'gba': 'Game Boy',
                'pce': 'TurboGrafx'
            };
            var consoleDetectado = mapa[ext] || '';
            var select = document.getElementById('campoConsole');
            var temOpcao = false;
            for (var i = 0; i < select.options.length; i++) {
                if (select.options[i].value === consoleDetectado) {
                    select.selectedIndex = i;
                    temOpcao = true;
                    break;
                }
            }
            if (consoleDetectado && !temOpcao) {
                var opt = document.createElement('option');
                opt.value = consoleDetectado;
                opt.textContent = consoleDetectado + ' (detectado)';
                select.add(opt);
                select.value = consoleDetectado;
            }
            if (consoleDetectado) {
                document.getElementById('nomeSugerido').textContent += ' | Console detectado: ' + consoleDetectado;
            }
        }

        function previewCapa(input) {
            var img = document.getElementById('previewCapaImg');
            if (input.files && input.files[0]) {
                var reader = new FileReader();
                reader.onload = function(e) {
                    img.src = e.target.result;
                    img.style.display = 'block';
                };
                reader.readAsDataURL(input.files[0]);
            } else {
                img.style.display = 'none';
            }
        }
    </script>
</body>
</html>
