-- ============================================
-- BINGO PRO V2 - DATABASE SCHEMA (VERSÃO CPANEL)
-- Sistema Profissional de Bingo
-- Versão: 2.0.0
-- IMPORTANTE: Use este arquivo para importar no cPanel/phpMyAdmin
-- ============================================

-- Configurações iniciais
START TRANSACTION;

-- ============================================
-- TABELA: games
-- Gerenciamento de rodadas de jogo
-- ============================================
CREATE TABLE `games` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `codigo` VARCHAR(20) NOT NULL,
  `status` ENUM('aberto', 'rodando', 'pausado', 'finalizado', 'cancelado') NOT NULL DEFAULT 'aberto',
  `tipo_jogo` ENUM('bingo90', 'bingo75', 'turbo') NOT NULL DEFAULT 'bingo90',
  `data_inicio` DATETIME DEFAULT NULL,
  `data_fim` DATETIME DEFAULT NULL,
  `bolas_sorteadas` JSON DEFAULT NULL COMMENT 'Array de números sorteados',
  `total_bolas` INT(3) NOT NULL DEFAULT 90,
  `premio_quina` DECIMAL(10,2) NOT NULL DEFAULT 10.00,
  `premio_bingo` DECIMAL(10,2) NOT NULL DEFAULT 50.00,
  `acumulado` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
  `total_arrecadado` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
  `total_cartelas_vendidas` INT(11) NOT NULL DEFAULT 0,
  `preco_cartela` DECIMAL(10,2) NOT NULL DEFAULT 2.00,
  `vencedor_quina_id` INT(11) UNSIGNED DEFAULT NULL,
  `vencedor_bingo_id` INT(11) UNSIGNED DEFAULT NULL,
  `criado_por` INT(11) UNSIGNED NOT NULL,
  `observacoes` TEXT DEFAULT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `codigo` (`codigo`),
  KEY `idx_status` (`status`),
  KEY `idx_data_inicio` (`data_inicio`),
  KEY `vencedor_quina_id` (`vencedor_quina_id`),
  KEY `vencedor_bingo_id` (`vencedor_bingo_id`),
  KEY `criado_por` (`criado_por`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- TABELA: cartelas
-- Gerenciamento de cartelas do jogo
-- ============================================
CREATE TABLE `cartelas` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id` INT(11) UNSIGNED NOT NULL,
  `game_id` INT(11) UNSIGNED NOT NULL,
  `codigo_unico` VARCHAR(20) NOT NULL,
  `numeros` JSON NOT NULL COMMENT 'Array com 15 números da cartela',
  `numeros_marcados` JSON DEFAULT NULL COMMENT 'Array com números já marcados',
  `status` ENUM('ativa', 'quina', 'bingo', 'expirada', 'cancelada') NOT NULL DEFAULT 'ativa',
  `tipo` ENUM('impressa', 'online', 'hibrida') NOT NULL DEFAULT 'online',
  `qrcode_path` VARCHAR(255) DEFAULT NULL,
  `pdf_path` VARCHAR(255) DEFAULT NULL,
  `total_acertos` INT(2) NOT NULL DEFAULT 0,
  `data_quina` DATETIME DEFAULT NULL,
  `data_bingo` DATETIME DEFAULT NULL,
  `validada_por` INT(11) UNSIGNED DEFAULT NULL,
  `observacoes` TEXT DEFAULT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `codigo_unico` (`codigo_unico`),
  KEY `user_id` (`user_id`),
  KEY `game_id` (`game_id`),
  KEY `idx_status` (`status`),
  KEY `idx_tipo` (`tipo`),
  KEY `validada_por` (`validada_por`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- TABELA: transacoes
-- Gerenciamento financeiro completo
-- ============================================
CREATE TABLE `transacoes` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id` INT(11) UNSIGNED NOT NULL,
  `game_id` INT(11) UNSIGNED DEFAULT NULL,
  `tipo` ENUM('deposito_pix', 'compra_cartela', 'premio_quina', 'premio_bingo', 'saque', 'comissao_afiliado', 'estorno', 'taxa_sistema') NOT NULL,
  `valor` DECIMAL(10,2) NOT NULL,
  `saldo_anterior` DECIMAL(10,2) NOT NULL,
  `saldo_posterior` DECIMAL(10,2) NOT NULL,
  `descricao` TEXT DEFAULT NULL,
  `comprovante_path` VARCHAR(255) DEFAULT NULL,
  `pix_codigo` TEXT DEFAULT NULL COMMENT 'Código PIX copia e cola',
  `pix_txid` VARCHAR(100) DEFAULT NULL COMMENT 'Transaction ID do PIX',
  `status` ENUM('pendente', 'aprovado', 'rejeitado', 'processando', 'cancelado') NOT NULL DEFAULT 'pendente',
  `aprovado_por` INT(11) UNSIGNED DEFAULT NULL,
  `data_aprovacao` DATETIME DEFAULT NULL,
  `ip_origem` VARCHAR(45) DEFAULT NULL,
  `metadata` JSON DEFAULT NULL COMMENT 'Dados adicionais em JSON',
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `game_id` (`game_id`),
  KEY `idx_tipo` (`tipo`),
  KEY `idx_status` (`status`),
  KEY `idx_created_at` (`created_at`),
  KEY `aprovado_por` (`aprovado_por`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- TABELA: comissoes_afiliados
-- Tracking detalhado de comissões
-- ============================================
CREATE TABLE `comissoes_afiliados` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `afiliado_id` INT(11) UNSIGNED NOT NULL,
  `referido_id` INT(11) UNSIGNED NOT NULL,
  `transacao_id` INT(11) UNSIGNED NOT NULL,
  `game_id` INT(11) UNSIGNED DEFAULT NULL,
  `valor_transacao` DECIMAL(10,2) NOT NULL,
  `percentual_comissao` DECIMAL(5,2) NOT NULL,
  `valor_comissao` DECIMAL(10,2) NOT NULL,
  `status` ENUM('pendente', 'pago', 'cancelado') NOT NULL DEFAULT 'pendente',
  `data_pagamento` DATETIME DEFAULT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `afiliado_id` (`afiliado_id`),
  KEY `referido_id` (`referido_id`),
  KEY `transacao_id` (`transacao_id`),
  KEY `game_id` (`game_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- TABELA: config
-- Configurações globais do sistema
-- ============================================
CREATE TABLE `config` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `chave` VARCHAR(50) NOT NULL,
  `valor` TEXT NOT NULL,
  `tipo` ENUM('string', 'number', 'boolean', 'json') NOT NULL DEFAULT 'string',
  `descricao` TEXT DEFAULT NULL,
  `categoria` VARCHAR(50) DEFAULT 'geral',
  `editavel` TINYINT(1) NOT NULL DEFAULT 1,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `chave` (`chave`),
  KEY `idx_categoria` (`categoria`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- TABELA: logs_sistema
-- Auditoria e rastreamento de ações
-- ============================================
CREATE TABLE `logs_sistema` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id` INT(11) UNSIGNED DEFAULT NULL,
  `acao` VARCHAR(100) NOT NULL,
  `tabela_afetada` VARCHAR(50) DEFAULT NULL,
  `registro_id` INT(11) UNSIGNED DEFAULT NULL,
  `dados_antes` JSON DEFAULT NULL,
  `dados_depois` JSON DEFAULT NULL,
  `ip_origem` VARCHAR(45) DEFAULT NULL,
  `user_agent` TEXT DEFAULT NULL,
  `nivel` ENUM('info', 'warning', 'error', 'critical') NOT NULL DEFAULT 'info',
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `idx_acao` (`acao`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_nivel` (`nivel`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- TABELA: sessoes
-- Gerenciamento de sessões de usuários
-- ============================================
CREATE TABLE `sessoes` (
  `id` VARCHAR(128) NOT NULL,
  `user_id` INT(11) UNSIGNED DEFAULT NULL,
  `ip_address` VARCHAR(45) NOT NULL,
  `user_agent` TEXT DEFAULT NULL,
  `payload` TEXT NOT NULL,
  `last_activity` INT(11) UNSIGNED NOT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `idx_last_activity` (`last_activity`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- INSERIR CONFIGURAÇÕES PADRÃO
-- ============================================
INSERT INTO `config` (`chave`, `valor`, `tipo`, `descricao`, `categoria`, `editavel`) VALUES
('preco_cartela', '2.00', 'number', 'Preço padrão de uma cartela', 'financeiro', 1),
('comissao_afiliado', '0.10', 'number', 'Percentual de comissão para afiliados (10%)', 'afiliados', 1),
('retencao_casa', '0.30', 'number', 'Percentual de retenção da casa (30%)', 'financeiro', 1),
('premio_quina', '10.00', 'number', 'Valor padrão do prêmio de Quina', 'premios', 1),
('premio_bingo', '50.00', 'number', 'Valor padrão do prêmio de Bingo', 'premios', 1),
('max_cartelas_por_usuario', '10', 'number', 'Máximo de cartelas por usuário por jogo', 'jogo', 1),
('tempo_autovalidacao', '5', 'number', 'Tempo em segundos para autovalidação de vitória', 'jogo', 1),
('narrador_ativo', 'true', 'boolean', 'Ativar narração de voz no painel TV', 'interface', 1),
('narrador_velocidade', '0.8', 'number', 'Velocidade da narração (0.1 a 2.0)', 'interface', 1),
('pix_chave', '', 'string', 'Chave PIX para recebimento', 'financeiro', 1),
('pix_nome_recebedor', '', 'string', 'Nome do recebedor PIX', 'financeiro', 1),
('pix_cidade', '', 'string', 'Cidade do recebedor PIX', 'financeiro', 1),
('site_nome', 'Bingo Pro V2', 'string', 'Nome do site', 'geral', 1),
('site_url', 'http://localhost', 'string', 'URL do site', 'geral', 1),
('modo_manutencao', 'false', 'boolean', 'Ativar modo de manutenção', 'geral', 1);

-- ============================================
-- FINALIZAÇÃO
-- ============================================
COMMIT;
