-- ============================================================
-- Migration v102 — Banco de Sangue: Resultados Online
-- Módulo para disponibilizar resultados de exames do banco de
-- sangue com acesso por token seguro (sem necessidade de login).
-- Prefixo: bs_  |  Segue padrão da v95/v96
-- ============================================================

SET NAMES utf8mb4;

-- ------------------------------------------------------------
-- Tabela principal de resultados do banco de sangue
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `bs_resultados` (
  `id`               int(11)       NOT NULL AUTO_INCREMENT,
  `clinica_id`       int(11)       NOT NULL,
  `paciente_id`      int(11)       NOT NULL,
  `tipo_exame`       enum(
                       'hemograma',
                       'tipagem_sanguinea',
                       'sorologico',
                       'coagulacao',
                       'bioquimica',
                       'imuno_hematologia',
                       'outro'
                     )             NOT NULL DEFAULT 'outro',
  `titulo`           varchar(200)  NOT NULL,
  `descricao`        text          DEFAULT NULL,
  `arquivo`          varchar(255)  NOT NULL,
  `data_resultado`   date          NOT NULL,
  `data_validade`    date          DEFAULT NULL COMMENT 'NULL = link sem expiração',
  `token_acesso`     varchar(64)   NOT NULL,
  `status`           enum('ativo','expirado','cancelado') NOT NULL DEFAULT 'ativo',
  `notificado_email` tinyint(1)    NOT NULL DEFAULT 0,
  `criado_por`       int(11)       DEFAULT NULL COMMENT 'FK usuarios.id',
  `data_criacao`     timestamp     NOT NULL DEFAULT current_timestamp(),
  `atualizado_em`    timestamp     NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_bs_res_token`    (`token_acesso`),
  KEY `idx_bs_res_clinica`        (`clinica_id`),
  KEY `idx_bs_res_paciente`       (`paciente_id`),
  KEY `idx_bs_res_status`         (`status`),
  KEY `idx_bs_res_data`           (`data_resultado`),
  CONSTRAINT `fk_bs_res_paciente`
    FOREIGN KEY (`paciente_id`) REFERENCES `pacientes` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_bs_res_usuario`
    FOREIGN KEY (`criado_por`) REFERENCES `usuarios` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ------------------------------------------------------------
-- Permissões do módulo
-- ------------------------------------------------------------
INSERT IGNORE INTO `permissoes` (`nome`, `chave`, `descricao`) VALUES
('BS - Resultados: Visualizar', 'banco_sangue_resultados_view',   'Visualizar lista e detalhes dos resultados de exames do banco de sangue'),
('BS - Resultados: Gerenciar',  'banco_sangue_resultados_manage', 'Criar, editar e excluir resultados de exames do banco de sangue');

-- Concede as permissões automaticamente ao perfil Gestor do Hemocentro
INSERT IGNORE INTO `perfil_permissoes` (`perfil_id`, `permissao_id`)
SELECT p.id, pm.id
FROM `perfis` p, `permissoes` pm
WHERE p.nome = 'Gestor do Hemocentro'
  AND pm.chave IN ('banco_sangue_resultados_view', 'banco_sangue_resultados_manage');

-- ------------------------------------------------------------
-- Verificação
-- ------------------------------------------------------------
SELECT
    (SELECT COUNT(*) FROM information_schema.tables
     WHERE table_schema = DATABASE() AND table_name = 'bs_resultados') AS tabela_bs_resultados,
    (SELECT COUNT(*) FROM permissoes
     WHERE chave IN ('banco_sangue_resultados_view','banco_sangue_resultados_manage')) AS permissoes_inseridas,
    'migration_v102 OK' AS resultado;
