-- ============================================================
-- CHECKOUT PRO 2025 - SCHEMA COMPLETO DO BANCO DE DADOS
-- ============================================================
-- 
-- Este arquivo contém TODO o esquema do banco de dados do Checkout Pro 2025.
-- Execute este arquivo em um banco MySQL/MariaDB limpo para criar toda a estrutura.
-- 
-- IMPORTANTE: Este arquivo é auto-contido e pode ser executado em um banco vazio.
-- 
-- Data: Janeiro 2025
-- Versão: Checkout Pro 2025
-- ============================================================

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";

-- ============================================================
-- TABELAS ORIGINAIS DO SISTEMA
-- ============================================================

-- Tabela de produtos
CREATE TABLE IF NOT EXISTS `produtos` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `usuario_id` INT(11) NULL DEFAULT NULL COMMENT 'ID do usuário dono do produto',
    `nome` VARCHAR(255) NOT NULL,
    `descricao` TEXT,
    `preco_original` DECIMAL(10,2) DEFAULT 0.00,
    `preco_atual` DECIMAL(10,2) DEFAULT 0.00,
    `imagem` VARCHAR(500) DEFAULT NULL,
    `categoria` VARCHAR(100) DEFAULT NULL,
    `link_pagamento` VARCHAR(500) DEFAULT NULL,
    `link_entregavel` VARCHAR(500) DEFAULT NULL,
    `checkout_background_color` VARCHAR(7) DEFAULT '#0f0c29',
    `checkout_banner` VARCHAR(500) DEFAULT NULL,
    `checkout_card_background` VARCHAR(50) DEFAULT '#151525',
    `checkout_main_card_background` VARCHAR(50) DEFAULT '#1a1a2e',
    `checkout_text_color` VARCHAR(7) DEFAULT '#ffffff',
    `provas_sociais` TEXT DEFAULT NULL,
    `is_marketplace` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 = aparece no marketplace, 0 = não aparece',
    `status_produto` VARCHAR(20) NOT NULL DEFAULT 'ativo' COMMENT 'Status: ativo, inativo, oculto',
    `afiliacao_ativa` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 = aceita afiliados, 0 = não aceita',
    `comissao_padrao` DECIMAL(10,2) NULL DEFAULT NULL COMMENT 'Comissão padrão para afiliados',
    `data_criacao` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `data_atualizacao` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_usuario_id` (`usuario_id`),
    KEY `idx_is_marketplace` (`is_marketplace`),
    KEY `idx_status_produto` (`status_produto`),
    KEY `idx_afiliacao_ativa` (`afiliacao_ativa`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de produtos adicionais (Order Bumps)
CREATE TABLE IF NOT EXISTS `produtos_adicionais` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `produto_principal_id` INT(11) NOT NULL,
    `produto_adicional_id` INT(11) NOT NULL,
    `preco_original` DECIMAL(10,2) DEFAULT 0.00,
    `preco_promocional` DECIMAL(10,2) DEFAULT 0.00,
    `imagem` VARCHAR(500) DEFAULT NULL,
    `titulo_rosa` VARCHAR(255) DEFAULT NULL,
    `link_pagina` VARCHAR(500) DEFAULT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_produto_principal` (`produto_principal_id`),
    KEY `idx_produto_adicional` (`produto_adicional_id`),
    CONSTRAINT `fk_produtos_adicionais_principal` FOREIGN KEY (`produto_principal_id`) REFERENCES `produtos` (`id`) ON DELETE CASCADE,
    CONSTRAINT `fk_produtos_adicionais_adicional` FOREIGN KEY (`produto_adicional_id`) REFERENCES `produtos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de transações
CREATE TABLE IF NOT EXISTS `transacoes` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `produto_id` INT(11) DEFAULT NULL,
    `produtor_id` INT(11) NULL DEFAULT NULL COMMENT 'ID do usuário produtor (dono do produto)',
    `afiliado_id` INT(11) NULL DEFAULT NULL COMMENT 'ID do usuário afiliado (se houver)',
    `nome` VARCHAR(255) NOT NULL,
    `sobrenome` VARCHAR(255) DEFAULT NULL,
    `email` VARCHAR(255) NOT NULL,
    `telefone` VARCHAR(50) DEFAULT NULL,
    `cpf` VARCHAR(20) DEFAULT NULL,
    `device_ip` VARCHAR(50) DEFAULT NULL,
    `valor` DECIMAL(10,2) NOT NULL,
    `descricao` VARCHAR(500) DEFAULT NULL,
    `status` VARCHAR(50) DEFAULT 'Pendente',
    `tipo_pagamento` VARCHAR(50) DEFAULT NULL,
    `gateway` VARCHAR(50) NULL DEFAULT NULL COMMENT 'Gateway de pagamento: mercadopago, stripe, paypal',
    `device_id` VARCHAR(255) DEFAULT NULL,
    `external_reference` VARCHAR(255) DEFAULT NULL,
    `payment_id` VARCHAR(255) DEFAULT NULL,
    `qr_code` TEXT DEFAULT NULL,
    `qr_code_base64` TEXT DEFAULT NULL,
    `metadados` TEXT DEFAULT NULL,
    `link_entregavel` VARCHAR(500) DEFAULT NULL,
    `erro` TEXT DEFAULT NULL,
    `notificado` TINYINT(1) DEFAULT 0,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_produto_id` (`produto_id`),
    KEY `idx_produtor_id` (`produtor_id`),
    KEY `idx_afiliado_id` (`afiliado_id`),
    KEY `idx_gateway` (`gateway`),
    KEY `idx_status` (`status`),
    KEY `idx_payment_id` (`payment_id`),
    KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de transações adicionais (produtos adicionais comprados)
CREATE TABLE IF NOT EXISTS `transacoes_adicionais` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `transacao_id` INT(11) NOT NULL,
    `produto_id` INT(11) NOT NULL,
    `nome` VARCHAR(255) NOT NULL,
    `preco` DECIMAL(10,2) NOT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_transacao_id` (`transacao_id`),
    KEY `idx_produto_id` (`produto_id`),
    CONSTRAINT `fk_transacoes_adicionais_transacao` FOREIGN KEY (`transacao_id`) REFERENCES `transacoes` (`id`) ON DELETE CASCADE,
    CONSTRAINT `fk_transacoes_adicionais_produto` FOREIGN KEY (`produto_id`) REFERENCES `produtos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de configurações
CREATE TABLE IF NOT EXISTS `configuracoes` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `chave` VARCHAR(255) NOT NULL,
    `valor` TEXT DEFAULT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `unique_chave` (`chave`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de credenciais (Mercado Pago - compatibilidade)
CREATE TABLE IF NOT EXISTS `credenciais` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `access_token` VARCHAR(255) DEFAULT NULL,
    `public_key` VARCHAR(255) DEFAULT NULL,
    `data_atualizacao` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de carrinhos abandonados
CREATE TABLE IF NOT EXISTS `carrinhos_abandonados` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `produto_id` INT(11) DEFAULT NULL,
    `nome` VARCHAR(255) DEFAULT NULL,
    `email` VARCHAR(255) DEFAULT NULL,
    `telefone` VARCHAR(50) DEFAULT NULL,
    `valor` DECIMAL(10,2) DEFAULT NULL,
    `status` VARCHAR(50) DEFAULT 'abandonado',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_produto_id` (`produto_id`),
    KEY `idx_email` (`email`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- TABELAS ADICIONADAS NAS EVOLUÇÕES
-- ============================================================

-- Tabela de usuários (admin e usuário comum)
CREATE TABLE IF NOT EXISTS `usuarios` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `nome` VARCHAR(191) NOT NULL,
    `email` VARCHAR(191) NOT NULL,
    `senha_hash` VARCHAR(255) NOT NULL,
    `tipo` ENUM('admin', 'usuario') NOT NULL DEFAULT 'usuario',
    `status` VARCHAR(50) NOT NULL DEFAULT 'ativo',
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `email` (`email`),
    KEY `idx_tipo` (`tipo`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de afiliações
CREATE TABLE IF NOT EXISTS `afiliacoes` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `produto_id` INT(11) NOT NULL,
    `usuario_id` INT(11) NOT NULL COMMENT 'ID do usuário afiliado',
    `comissao_tipo` VARCHAR(20) NOT NULL DEFAULT 'percentual' COMMENT 'Tipo: percentual ou fixo',
    `comissao_valor` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT 'Valor da comissão (percentual ou fixo)',
    `status` VARCHAR(20) NOT NULL DEFAULT 'ativo' COMMENT 'Status: ativo, inativo, pendente',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `unique_afiliacao` (`produto_id`, `usuario_id`),
    KEY `idx_produto_id` (`produto_id`),
    KEY `idx_usuario_id` (`usuario_id`),
    KEY `idx_status` (`status`),
    CONSTRAINT `fk_afiliacoes_produto` FOREIGN KEY (`produto_id`) REFERENCES `produtos` (`id`) ON DELETE CASCADE,
    CONSTRAINT `fk_afiliacoes_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de vendas e comissões
CREATE TABLE IF NOT EXISTS `vendas_comissoes` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `transacao_id` INT(11) NOT NULL,
    `produtor_id` INT(11) NOT NULL,
    `afiliado_id` INT(11) NULL DEFAULT NULL COMMENT 'NULL se não houver afiliado',
    `valor_produtor` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT 'Valor da comissão do produtor',
    `valor_afiliado` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT 'Valor da comissão do afiliado',
    `valor_plataforma` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT 'Valor da plataforma (futuro)',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `unique_transacao_id` (`transacao_id`),
    KEY `idx_produtor_id` (`produtor_id`),
    KEY `idx_afiliado_id` (`afiliado_id`),
    KEY `idx_created_at` (`created_at`),
    CONSTRAINT `fk_comissoes_transacao` FOREIGN KEY (`transacao_id`) REFERENCES `transacoes` (`id`) ON DELETE CASCADE,
    CONSTRAINT `fk_comissoes_produtor` FOREIGN KEY (`produtor_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE,
    CONSTRAINT `fk_comissoes_afiliado` FOREIGN KEY (`afiliado_id`) REFERENCES `usuarios` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de saldos dos usuários
CREATE TABLE IF NOT EXISTS `saldos_usuarios` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `usuario_id` INT(11) NOT NULL,
    `saldo_disponivel` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT 'Saldo disponível para saque',
    `saldo_pendente` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT 'Saldo pendente (período de garantia)',
    `saldo_bloqueado` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT 'Saldo bloqueado (aguardando processamento de saque)',
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `unique_usuario_id` (`usuario_id`),
    KEY `idx_usuario_id` (`usuario_id`),
    CONSTRAINT `fk_saldos_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabela de saques
CREATE TABLE IF NOT EXISTS `saques` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `usuario_id` INT(11) NOT NULL,
    `valor` DECIMAL(10,2) NOT NULL COMMENT 'Valor solicitado para saque',
    `status` VARCHAR(20) NOT NULL DEFAULT 'pendente' COMMENT 'Status: pendente, aprovado, reprovado, pago',
    `forma_pagamento` VARCHAR(50) NOT NULL DEFAULT 'PIX' COMMENT 'Forma de pagamento: PIX, TED, etc.',
    `chave_pagamento` VARCHAR(255) NOT NULL COMMENT 'Chave PIX, conta bancária, etc.',
    `observacao` TEXT NULL COMMENT 'Observações do admin',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_usuario_id` (`usuario_id`),
    KEY `idx_status` (`status`),
    KEY `idx_created_at` (`created_at`),
    CONSTRAINT `fk_saques_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- DADOS INICIAIS (OPCIONAL)
-- ============================================================

-- Inserir configuração padrão do Facebook Pixel (opcional)
-- INSERT INTO configuracoes (chave, valor) VALUES ('facebook_pixel_id', '') ON DUPLICATE KEY UPDATE valor = valor;

-- ============================================================
-- FIM DO SCHEMA
-- ============================================================

COMMIT;


