-- ===============================================
-- TABELA PARA TOKENS DE AUTENTICAÇÃO MOBILE DO PORTEIRO
-- ===============================================

CREATE TABLE IF NOT EXISTS tokens_porteiro_mobile (
    id INT AUTO_INCREMENT PRIMARY KEY,
    token VARCHAR(64) NOT NULL UNIQUE COMMENT 'Token único de autenticação',
    usuario_id INT NOT NULL COMMENT 'ID do usuário (porteiro) no sistema SaaS',
    condominio_id INT NOT NULL COMMENT 'ID do condomínio',
    nome_usuario VARCHAR(255) NOT NULL COMMENT 'Nome do porteiro',
    funcao VARCHAR(50) DEFAULT 'porteiro' COMMENT 'Função do usuário',
    expiracao DATETIME NOT NULL COMMENT 'Data/hora de expiração do token',
    created_at DATETIME NOT NULL COMMENT 'Data/hora de criação',
    usado TINYINT(1) DEFAULT 0 COMMENT 'Se o token já foi utilizado',
    usado_em DATETIME NULL COMMENT 'Data/hora que o token foi usado',
    ip_usado VARCHAR(45) NULL COMMENT 'IP que usou o token',
    user_agent TEXT NULL COMMENT 'User agent do dispositivo que usou',
    INDEX idx_token (token),
    INDEX idx_usuario (usuario_id),
    INDEX idx_condominio (condominio_id),
    INDEX idx_expiracao (expiracao),
    INDEX idx_usado (usado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Tokens de autenticação móvel para porteiros';

-- ===============================================
-- LIMPEZA AUTOMÁTICA DE TOKENS EXPIRADOS
-- ===============================================

-- Event para limpar tokens expirados automaticamente (a cada hora)
DELIMITER $$

CREATE EVENT IF NOT EXISTS limpar_tokens_expirados
ON SCHEDULE EVERY 1 HOUR
DO
BEGIN
    DELETE FROM tokens_porteiro_mobile 
    WHERE expiracao < NOW() 
    OR (usado = 1 AND usado_em < DATE_SUB(NOW(), INTERVAL 24 HOUR));
END$$

DELIMITER ;

-- Ativar eventos
SET GLOBAL event_scheduler = ON;

-- ===============================================
-- OBSERVAÇÕES:
-- ===============================================
-- 
-- 1. Tokens expiram em 10 minutos por padrão
-- 2. Cada token só pode ser usado uma vez
-- 3. Tokens usados são mantidos por 24h para auditoria
-- 4. Sistema limpa automaticamente tokens antigos
-- 
-- ===============================================

