-- ============================================================
-- v99: Chat Interno — mensagens entre usuários do sistema
-- ============================================================

SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS `chat_conversas` (
    `id`          INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `tipo`        ENUM('privada','grupo') NOT NULL DEFAULT 'privada',
    `nome`        VARCHAR(100) NULL COMMENT 'Nome do grupo (NULL para conversas privadas)',
    `criado_por`  INT UNSIGNED NULL,
    `created_at`  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_updated` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `chat_participantes` (
    `id`             INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `conversa_id`    INT UNSIGNED NOT NULL,
    `usuario_id`     INT UNSIGNED NOT NULL,
    `ultimo_lido_id` INT UNSIGNED NULL COMMENT 'ID da última mensagem lida pelo participante',
    `joined_at`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_conversa_usuario` (`conversa_id`, `usuario_id`),
    KEY `idx_usuario` (`usuario_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `chat_mensagens` (
    `id`           INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `conversa_id`  INT UNSIGNED NOT NULL,
    `usuario_id`   INT UNSIGNED NOT NULL,
    `mensagem`     TEXT NOT NULL,
    `tipo`         ENUM('texto','arquivo') NOT NULL DEFAULT 'texto',
    `arquivo`      VARCHAR(255) NULL,
    `deletado`     TINYINT(1) NOT NULL DEFAULT 0,
    `created_at`   DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_conversa_created` (`conversa_id`, `created_at`),
    KEY `idx_usuario` (`usuario_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Permissão do módulo
INSERT IGNORE INTO `permissoes` (`nome`, `chave`, `descricao`) VALUES
('Acessar Chat Interno', 'chat_view', 'Permite enviar e receber mensagens no chat interno do sistema');

-- Concede a todos os perfis ativos (chat é utilitário geral)
INSERT IGNORE INTO `perfil_permissoes` (`perfil_id`, `permissao_id`)
SELECT p.id, pm.id
FROM perfis p
JOIN permissoes pm ON pm.chave = 'chat_view'
WHERE p.status = 1;
