-- SQL para criação da tabela de rastreamento (tracking híbrido) - VERSÃO SEGURA
-- Esta versão verifica se a coluna existe antes de adicionar

-- 1. Criar tabela de rastreamento
CREATE TABLE IF NOT EXISTS tracking_eventos (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    session_id VARCHAR(100) NOT NULL,
    aluno_id INT NULL,
    order_nsu VARCHAR(50) NULL,
    evento VARCHAR(100) NOT NULL,
    pagina VARCHAR(255) NOT NULL,
    origem VARCHAR(50),
    user_agent TEXT,
    ip_address VARCHAR(45),
    utm_source VARCHAR(100),
    utm_medium VARCHAR(100),
    utm_campaign VARCHAR(100),
    utm_content VARCHAR(100),
    utm_term VARCHAR(100),
    dados_adicionais TEXT,
    data_evento TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_session (session_id),
    INDEX idx_aluno (aluno_id),
    INDEX idx_order (order_nsu),
    INDEX idx_evento (evento),
    INDEX idx_data (data_evento),
    FOREIGN KEY (aluno_id) REFERENCES aluno(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Rastreamento híbrido de eventos do funil';

-- 2. Adicionar coluna pixel_enviado na tabela compras (apenas se não existir)
-- Este procedimento verifica antes de adicionar
DELIMITER $$

DROP PROCEDURE IF EXISTS AddPixelEnviadoColumn$$

CREATE PROCEDURE AddPixelEnviadoColumn()
BEGIN
    -- Verifica se a coluna já existe
    IF NOT EXISTS (
        SELECT * FROM information_schema.COLUMNS
        WHERE TABLE_SCHEMA = DATABASE()
        AND TABLE_NAME = 'compras'
        AND COLUMN_NAME = 'pixel_enviado'
    ) THEN
        -- Adiciona a coluna apenas se não existir
        ALTER TABLE compras 
        ADD COLUMN pixel_enviado TINYINT(1) DEFAULT 0 COMMENT '0 = não enviado, 1 = enviado';
        
        SELECT 'Coluna pixel_enviado adicionada com sucesso!' AS Resultado;
    ELSE
        SELECT 'Coluna pixel_enviado já existe. Nada a fazer.' AS Resultado;
    END IF;
END$$

DELIMITER ;

-- 3. Executa o procedimento
CALL AddPixelEnviadoColumn();

-- 4. Remove o procedimento temporário (limpeza)
DROP PROCEDURE IF EXISTS AddPixelEnviadoColumn;
