# 🚀 Sistema de Votação KamikaZ - Guia de Instalação

## 📋 Pré-requisitos

- **Servidor Web**: Apache/Nginx com PHP 7.4+
- **Banco de Dados**: MySQL 5.7+ ou MariaDB 10.2+
- **PHP Extensions**: PDO, PDO_MySQL, cURL, JSON
- **Servidor L2J**: L2J Mobius Essence ou similar

## 🗄️ Instalação do Banco de Dados

### 1. Criação da Estrutura
```bash
# Acesse o MySQL como root
mysql -u root -p

# Execute o arquivo SQL
source /caminho/para/database_structure.sql
```

### 2. Verificação das Tabelas
```sql
USE l2jmobiusessence;
SHOW TABLES;
```

**Tabelas criadas:**
- ✅ `accounts` - Contas dos usuários
- ✅ `characters` - Personagens dos jogadores
- ✅ `vote_log` - Log de votos nos sites
- ✅ `vote_reward_log` - Log de recompensas entregues
- ✅ `custom_mail` - Sistema de entrega de itens

## ⚙️ Configuração do Sistema

### 1. Configuração do Banco (`config.php`)
```php
/* ---- DATABASE ---- */
$servername = "localhost";        // Seu servidor MySQL
$username   = "root";            // Usuário do banco
$password   = "";                // Senha do banco
$dbname     = "l2jmobiusessence"; // Nome do banco criado
```

### 2. Configuração dos Sites de Votação
```php
/* ---- Top L2J Brasil VoteSystem ---- */
$top_l2jbr_user   = 'SEU_USUARIO';           // Seu usuário no Top L2J Brasil
$l2jbr_player_id  = 'SEU_PLAYER_ID';         // Seu Player ID
$l2jbr_votesystem = 'https://top.l2jbrasil.com/votesystem/';

/* ---- L2Network ---- */
'L2Network' => [
    'enabled'    => true,
    'apiKey'     => 'SUA_API_KEY',            // Sua API Key do L2Network
    'idMode'     => 'account',
],

/* ---- L2Top.co ---- */
'L2Top.co' => [
    'enabled'    => true,
    'serverId'   => 'SEU_SERVER_ID',          // ID do seu servidor no L2Top.co
    'idMode'     => 'none',                   // Validação por IP
],
```

### 3. Configuração de Recompensas
```php
/* ---- REWARD / COOLDOWN ---- */
$cooldownH     = 12;              // Janela do ciclo (horas)
$reward_items  = "49129 1";       // Item(s) enviados (ID QTD)
```

## 🔧 Configuração dos Providers

### L2J Brasil Provider
1. Acesse [Top L2J Brasil](https://top.l2jbrasil.com)
2. Crie uma conta e adicione seu servidor
3. Obtenha seu `player_id` e `username`
4. Configure no `config.php`

### L2Network Provider
1. Acesse [L2Network](https://l2network.eu)
2. Crie uma conta e adicione seu servidor
3. Obtenha sua `API Key`
4. Configure no `config.php`

### L2Top.co Provider
1. Acesse [L2Top.co](https://l2top.co)
2. Adicione seu servidor
3. Obtenha o `Server ID`
4. Configure no `config.php`

## 🎮 Integração com o Servidor L2J

### 1. Sistema de Mail Customizado
O sistema usa a tabela `custom_mail` para entregar itens. Você precisa:

**Opção A: Modificar o servidor L2J**
- Adicionar um sistema que leia a tabela `custom_mail`
- Processar os mails pendentes
- Atualizar o status para 'sent'

**Opção B: Usar sistema externo**
- Criar um script que processe a tabela `custom_mail`
- Conectar via API do servidor para entregar itens

### 2. Script de Processamento de Mails (Exemplo)
```php
<?php
// process_mails.php
require_once 'config.php';

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8mb4", $username, $password);
    
    // Buscar mails pendentes
    $stmt = $conn->prepare("SELECT * FROM custom_mail WHERE status = 'pending'");
    $stmt->execute();
    $pendingMails = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    foreach ($pendingMails as $mail) {
        // Aqui você implementa a lógica de entrega
        // Conecta com o servidor L2J via API ou banco
        
        // Atualiza status
        $updateStmt = $conn->prepare("UPDATE custom_mail SET status = 'sent' WHERE id = ?");
        $updateStmt->execute([$mail['id']]);
    }
    
} catch(PDOException $e) {
    error_log("Erro ao processar mails: " . $e->getMessage());
}
?>
```

## 🚀 Primeiros Passos

### 1. Teste o Sistema
1. Acesse `http://seu-dominio/painel/`
2. Faça login com a conta criada (`admin` / `admin123`)
3. Acesse a seção de votação
4. Teste o sistema em modo DEMO primeiro

### 2. Modo DEMO
```php
$DEMO = [
    'enabled'        => true,     // Ativa modo demo
    'approve_all'    => true,     // Aprova todos os votos
    'deliver'        => false,    // Não entrega itens reais
    'persist_reward' => false,    // Não grava logs reais
];
```

### 3. Modo Produção
```php
$DEMO = [
    'enabled'        => false,    // Desativa modo demo
    'approve_all'    => false,
    'deliver'        => true,     // Entrega itens reais
    'persist_reward' => true,     // Grava logs reais
];
```

## 📊 Monitoramento e Manutenção

### 1. Logs do Sistema
- **vote_api.log**: Logs das APIs de verificação
- **Tabelas de log**: `vote_log`, `vote_reward_log`

### 2. Limpeza de Logs Antigos
```sql
-- Limpar logs com mais de 30 dias
CALL CleanOldVoteLogs(30);

-- Ou manualmente
DELETE FROM vote_log WHERE vote_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
DELETE FROM vote_reward_log WHERE reward_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
```

### 3. Estatísticas de Votação
```sql
-- Estatísticas por conta
CALL GetVoteStats('nome_da_conta');

-- Status geral
SELECT * FROM v_vote_status;

-- Top votadores
SELECT * FROM v_character_votes LIMIT 10;
```

## 🔒 Segurança

### 1. Permissões de Arquivo
```bash
chmod 644 *.php
chmod 755 providers/
chmod 644 config.php
```

### 2. Proteção do Diretório
```apache
# .htaccess
<Files "config.php">
    Order allow,deny
    Deny from all
</Files>
```

### 3. Validação de Sessão
- O sistema já inclui proteção CSRF
- Sessões são validadas em todas as páginas
- Logout automático após inatividade

## 🐛 Troubleshooting

### Problemas Comuns

**1. Erro de Conexão com Banco**
- Verifique credenciais no `config.php`
- Confirme se o banco foi criado
- Teste conexão manual

**2. Votos Não São Verificados**
- Verifique configuração dos providers
- Confirme API keys e URLs
- Ative `VOTE_API_DEBUG = true` para logs

**3. Itens Não São Entregues**
- Verifique tabela `custom_mail`
- Confirme se o script de processamento está rodando
- Verifique integração com servidor L2J

**4. Erro de Permissão**
- Verifique permissões de arquivo
- Confirme se o usuário web tem acesso ao banco

## 📞 Suporte

Para suporte técnico:
- Verifique os logs do sistema
- Confirme configurações no `config.php`
- Teste em modo DEMO primeiro
- Consulte a documentação do L2J

## 🎯 Próximos Passos

1. ✅ Execute o arquivo SQL
2. ✅ Configure o `config.php`
3. ✅ Teste em modo DEMO
4. ✅ Configure os providers
5. ✅ Integre com o servidor L2J
6. ✅ Ative modo produção
7. ✅ Monitore e mantenha

---

**Sistema desenvolvido para Comercial UP** 🏢
*Painel de Votação Profissional para L2J*
