-- ============================================================================
-- MIGRATION: Adicionar user_id para isolamento multi-tenant
-- Data: 2025-11-21
-- Descrição: Adiciona coluna user_id em tabelas críticas para garantir
--            isolamento completo de dados entre empresas
-- ============================================================================

-- IMPORTANTE: Execute este script em ambiente de TESTE primeiro!
-- Faça BACKUP completo do banco de dados antes de executar em produção!

USE soumulheragenda; -- Ajuste o nome do banco conforme necessário

-- ============================================================================
-- 1. TABELA: mensagens
-- PRIORIDADE: CRÍTICA
-- RISCO: Alto - Mensagens podem vazar entre empresas
-- ============================================================================

-- Verificar se a coluna já existe antes de adicionar
SELECT 'Adicionando user_id na tabela mensagens...' AS status;

ALTER TABLE `mensagens`
ADD COLUMN `user_id` INT NOT NULL AFTER `id`,
ADD INDEX `idx_mensagens_user_id` (`user_id`);

-- Atualizar registros existentes (AJUSTE CONFORME SUA LÓGICA)
-- Opção 1: Se você tem apenas 1 empresa no sistema, pode usar um user_id fixo:
-- UPDATE `mensagens` SET `user_id` = 1 WHERE `user_id` = 0;

-- Opção 2: Se precisa relacionar via instance_key, faça um UPDATE com JOIN
-- UPDATE `mensagens` m
-- INNER JOIN `instancia` i ON m.instance_key = i.instance_key
-- SET m.user_id = i.user_id
-- WHERE m.user_id = 0;

SELECT 'user_id adicionado na tabela mensagens ✓' AS status;

-- ============================================================================
-- 2. TABELA: marcacoes (eventos)
-- PRIORIDADE: ALTA
-- RISCO: Alto - Eventos podem vazar entre empresas
-- ============================================================================

SELECT 'Adicionando user_id na tabela marcacoes...' AS status;

ALTER TABLE `marcacoes`
ADD COLUMN `user_id` INT NOT NULL AFTER `id`,
ADD INDEX `idx_marcacoes_user_id` (`user_id`);

-- Atualizar registros existentes
-- IMPORTANTE: Ajuste conforme sua necessidade
-- Se você tem apenas 1 empresa:
-- UPDATE `marcacoes` SET `user_id` = 1 WHERE `user_id` = 0;

SELECT 'user_id adicionado na tabela marcacoes ✓' AS status;

-- ============================================================================
-- 3. OTIMIZAÇÃO: Adicionar índices compostos para melhor performance
-- ============================================================================

SELECT 'Adicionando índices compostos para otimização...' AS status;

-- Índice composto para consultas filtradas por user_id
ALTER TABLE `mensagens`
ADD INDEX `idx_mensagens_user_instance` (`user_id`, `instance_key`);

ALTER TABLE `marcacoes`
ADD INDEX `idx_marcacoes_user_date` (`user_id`, `start_date`);

SELECT 'Índices adicionados ✓' AS status;

-- ============================================================================
-- 4. VERIFICAÇÃO: Checar se as alterações foram aplicadas corretamente
-- ============================================================================

SELECT 'Verificando alterações...' AS status;

-- Verificar estrutura da tabela mensagens
DESCRIBE `mensagens`;

-- Verificar estrutura da tabela marcacoes
DESCRIBE `marcacoes`;

-- Contar registros sem user_id (devem ser 0 após migração completa)
SELECT
    'mensagens' AS tabela,
    COUNT(*) AS registros_sem_user_id
FROM `mensagens`
WHERE `user_id` = 0 OR `user_id` IS NULL

UNION ALL

SELECT
    'marcacoes' AS tabela,
    COUNT(*) AS registros_sem_user_id
FROM `marcacoes`
WHERE `user_id` = 0 OR `user_id` IS NULL;

-- ============================================================================
-- ROLLBACK (se necessário)
-- ============================================================================

-- Para reverter as alterações, execute os comandos abaixo:

/*
ALTER TABLE `mensagens`
DROP INDEX `idx_mensagens_user_instance`,
DROP INDEX `idx_mensagens_user_id`,
DROP COLUMN `user_id`;

ALTER TABLE `marcacoes`
DROP INDEX `idx_marcacoes_user_date`,
DROP INDEX `idx_marcacoes_user_id`,
DROP COLUMN `user_id`;
*/

SELECT '✓ MIGRATION CONCLUÍDA COM SUCESSO!' AS status;
SELECT 'LEMBRE-SE: Atualize os registros existentes com o user_id correto!' AS alerta;

-- ============================================================================
-- NOTAS IMPORTANTES:
-- ============================================================================
--
-- 1. DADOS EXISTENTES:
--    Após executar este script, você DEVE atualizar os registros existentes
--    com o user_id correto. Caso contrário, os registros ficarão com user_id=0
--    e não serão acessíveis.
--
-- 2. BACKUP:
--    SEMPRE faça backup do banco antes de executar esta migration!
--
-- 3. AMBIENTE DE TESTE:
--    Execute primeiro em ambiente de desenvolvimento/teste.
--
-- 4. VERIFICAÇÃO:
--    Após a migration, verifique se todos os registros têm user_id válido.
--
-- ============================================================================
