-- =============================================================================
-- REVERSAO SEGURA da migracao 20261024_ponto_individual.sql
--
-- MODO PADRAO = NAO REMOVE NADA. Por padrao este arquivo apenas:
--   1. cria uma tabela de BACKUP com todas as configuracoes individuais de ponto (aditivo), e
--   2. mostra quantos funcionarios tem configuracao individual.
-- A remocao das colunas so ocorre se o revisor definir EXPLICITAMENTE, antes de executar (valor exato SIM em maiusculas):
--       SET @confirmo_remover = 'SIM';
-- e ainda assim e BLOQUEADA se existirem funcionarios com horarios, batidas, perfil ou vigencia
-- configurados (configuracao criada depois da migracao), a menos que tambem se defina:
--       SET @forcar_com_config = 'SIM';
-- Mesmo removendo, o backup preserva tudo: use 20261024_ponto_individual_RESTORE.sql para recuperar.
-- Reverter o CODIGO junto: o model novo exige as colunas. O codigo antigo funciona com ou sem elas.
-- Nao use ponto e virgula dentro de comentarios.
-- =============================================================================
SET @confirmo_remover = COALESCE(@confirmo_remover, 'NAO');
SET @forcar_com_config = COALESCE(@forcar_com_config, 'NAO');

-- 1. BACKUP (so das colunas que existirem) --------------------------------------
SET @colunas_existentes = (SELECT GROUP_CONCAT(column_name ORDER BY ordinal_position) FROM information_schema.columns
  WHERE table_schema = DATABASE() AND LOWER(table_name) = 'funcionario' AND column_name IN ('tolerancia_ponto_min', 'ponto_batidas', 'ponto_perfil', 'ponto_hora_entrada', 'ponto_hora_almoco', 'ponto_hora_retorno', 'ponto_hora_saida', 'ponto_regras_desde'));
SET @bk = CONCAT('Funcionario_ponto_cfg_bkp_', DATE_FORMAT(NOW(6), '%Y%m%d_%H%i%s_%f'));
SET @s = IF(@colunas_existentes IS NULL, 'DO 0', CONCAT('CREATE TABLE ', @bk, ' AS SELECT id, ', @colunas_existentes, ' FROM Funcionario'));
PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;

-- 2. RELATORIO (somente leitura) -------------------------------------------------
SET @com_config_alem_tolerancia = 0;
SET @s = IF(@colunas_existentes IS NULL, 'DO 0',
  'SELECT COUNT(*) INTO @com_config_alem_tolerancia FROM Funcionario WHERE ponto_batidas IS NOT NULL OR ponto_perfil IS NOT NULL OR ponto_hora_entrada IS NOT NULL OR ponto_hora_almoco IS NOT NULL OR ponto_hora_retorno IS NOT NULL OR ponto_hora_saida IS NOT NULL OR ponto_regras_desde IS NOT NULL');
PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
SELECT @bk AS tabela_de_backup, @colunas_existentes AS colunas_salvas, @com_config_alem_tolerancia AS funcionarios_com_config_alem_da_tolerancia,
       @confirmo_remover AS confirmo_remover, @forcar_com_config AS forcar_com_config,
       CASE WHEN @colunas_existentes IS NULL THEN 'Nada a reverter (colunas inexistentes)'
            WHEN BINARY @confirmo_remover <> 'SIM' THEN 'MODO SEGURO: backup criado, NADA foi removido'
            WHEN @com_config_alem_tolerancia > 0 AND BINARY @forcar_com_config <> 'SIM' THEN 'BLOQUEADO: ha configuracao individual criada apos a migracao - nada removido'
            ELSE 'REMOVENDO colunas (backup preservado)' END AS situacao;

-- 3. REMOCAO (apenas com confirmacao e sem bloqueio) -----------------------------
SET @pode_remover = IF(@colunas_existentes IS NOT NULL AND BINARY @confirmo_remover = 'SIM' AND (@com_config_alem_tolerancia = 0 OR BINARY @forcar_com_config = 'SIM'), 1, 0);
SET @lista_drop = (SELECT GROUP_CONCAT(CONCAT('DROP COLUMN ', column_name) SEPARATOR ', ') FROM information_schema.columns
  WHERE table_schema = DATABASE() AND LOWER(table_name) = 'funcionario' AND column_name IN ('tolerancia_ponto_min', 'ponto_batidas', 'ponto_perfil', 'ponto_hora_entrada', 'ponto_hora_almoco', 'ponto_hora_retorno', 'ponto_hora_saida', 'ponto_regras_desde'));
SET @s = IF(@pode_remover = 1, CONCAT('ALTER TABLE Funcionario ', @lista_drop), 'DO 0');
PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;
