-- ============================================================
-- Migration v97 — Perfis padrão para Banco de Sangue / Hemocentro
-- Cria grupo "Banco de Sangue" e 4 perfis com permissões pré-definidas
-- ============================================================

SET NAMES utf8mb4;

-- Adiciona coluna paciente_id em bs_doadores para vínculo opcional
ALTER TABLE `bs_doadores`
    ADD COLUMN IF NOT EXISTS `paciente_id` int(11) DEFAULT NULL
        COMMENT 'Vínculo opcional: mesma pessoa cadastrada como paciente' AFTER `clinica_id`;

-- ------------------------------------------------------------
-- Perfis do grupo Banco de Sangue
-- INSERT IGNORE evita duplicação em re-execuções
-- ------------------------------------------------------------
INSERT IGNORE INTO `perfis` (`nome`, `descricao`, `grupo`, `status`) VALUES
(
    'Gestor do Hemocentro',
    'Gestão completa do banco de sangue: doadores, estoque, requisições, relatórios e configurações.',
    'Banco de Sangue',
    1
),
(
    'Médico Hemoterapeuta',
    'Médico responsável: aprovação de bolsas, triagem clínica, liberação formal, transfusões e hemovigilância.',
    'Banco de Sangue',
    1
),
(
    'Técnico Hemoterapia',
    'Técnico de laboratório: coletas, testes sorológicos, processamento, pool, irradiação e estoque.',
    'Banco de Sangue',
    1
),
(
    'Recepcionista Hemocentro',
    'Recepção de doadores, agendamento de doações e cadastro básico.',
    'Banco de Sangue',
    1
);

-- ------------------------------------------------------------
-- Permissões do Gestor do Hemocentro
-- Tudo de banco de sangue + agendamentos + dashboard + usuários básicos
-- ------------------------------------------------------------
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 de Sangue — tudo
    'banco_sangue_view',
    'banco_sangue_doadores_manage',
    'banco_sangue_recepcao',
    'banco_sangue_testes_manage',
    'banco_sangue_hemo_manage',
    'banco_sangue_estoque_view',
    'banco_sangue_req_create',
    'banco_sangue_req_approve',
    'banco_sangue_transfusao_create',
    'banco_sangue_reacao_create',
    'banco_sangue_liberacao',
    'banco_sangue_expedicao',
    'banco_sangue_processo',
    'banco_sangue_autoexclusao',
    'banco_sangue_relatorios_full',
    'banco_sangue_config',
    -- Sistema básico
    'dashboard_view',
    'notificacoes_ver',
    'log_view',
    -- Agendamentos
    'appointment_create',
    'appointment_view',
    -- Pacientes (leitura para vincular receptores)
    'pacientes_view',
    -- Painel de chamada
    'painel_display',
    'painel_manage',
    'painel_recepcao',
    -- Configurações básicas
    'config_view'
);

-- ------------------------------------------------------------
-- Permissões do Médico Hemoterapeuta
-- ------------------------------------------------------------
INSERT IGNORE INTO `perfil_permissoes` (`perfil_id`, `permissao_id`)
SELECT p.id, pm.id FROM `perfis` p, `permissoes` pm
WHERE p.nome = 'Médico Hemoterapeuta'
  AND pm.chave IN (
    'banco_sangue_view',
    'banco_sangue_doadores_manage',
    'banco_sangue_testes_manage',
    'banco_sangue_hemo_manage',
    'banco_sangue_estoque_view',
    'banco_sangue_req_approve',
    'banco_sangue_transfusao_create',
    'banco_sangue_reacao_create',
    'banco_sangue_liberacao',
    'banco_sangue_relatorios_full',
    -- Pode ver agenda de doações
    'appointment_view',
    'dashboard_view',
    'notificacoes_ver',
    'pacientes_view'
);

-- ------------------------------------------------------------
-- Permissões do Técnico Hemoterapia
-- ------------------------------------------------------------
INSERT IGNORE INTO `perfil_permissoes` (`perfil_id`, `permissao_id`)
SELECT p.id, pm.id FROM `perfis` p, `permissoes` pm
WHERE p.nome = 'Técnico Hemoterapia'
  AND pm.chave IN (
    'banco_sangue_view',
    'banco_sangue_doadores_manage',
    'banco_sangue_recepcao',
    'banco_sangue_testes_manage',
    'banco_sangue_hemo_manage',
    'banco_sangue_estoque_view',
    'banco_sangue_autoexclusao',
    'banco_sangue_processo',
    'dashboard_view',
    'notificacoes_ver'
);

-- ------------------------------------------------------------
-- Permissões da Recepcionista Hemocentro
-- ------------------------------------------------------------
INSERT IGNORE INTO `perfil_permissoes` (`perfil_id`, `permissao_id`)
SELECT p.id, pm.id FROM `perfis` p, `permissoes` pm
WHERE p.nome = 'Recepcionista Hemocentro'
  AND pm.chave IN (
    'banco_sangue_view',
    'banco_sangue_doadores_manage',
    'banco_sangue_recepcao',
    'banco_sangue_estoque_view',
    -- Agendamento de doações
    'appointment_create',
    'appointment_view',
    -- Painel de chamada
    'painel_display',
    'painel_recepcao',
    'dashboard_view',
    'notificacoes_ver',
    'pacientes_view'
);

-- ------------------------------------------------------------
-- Verificação final
-- ------------------------------------------------------------
SELECT p.grupo, p.nome, COUNT(pp.permissao_id) as total_permissoes
FROM perfis p
LEFT JOIN perfil_permissoes pp ON pp.perfil_id = p.id
WHERE p.grupo = 'Banco de Sangue'
GROUP BY p.id, p.nome, p.grupo
ORDER BY p.nome;
