-- =============================================================================
-- Migration v59 — Permissões e Perfis Hospitalares
-- Cria permissões para todos os módulos hospitalares,
-- adiciona perfis específicos e atribui permissões por função.
-- =============================================================================

SET NAMES utf8mb4;
SET foreign_key_checks = 0;

-- =============================================================================
-- 1. PERMISSÕES — Módulos sem permissões registradas
-- =============================================================================

INSERT IGNORE INTO permissoes (nome, chave, descricao) VALUES

-- Leitos
('Visualizar Leitos',          'leitos_view',              'Visualizar mapa e listagem de leitos'),
('Gerenciar Leitos',           'leitos_manage',            'Criar, editar e alterar status de leitos e alas'),

-- Internação
('Visualizar Internações',     'internacao_view',          'Visualizar lista e detalhes de internações'),
('Admitir Paciente',           'internacao_create',        'Registrar nova internação / admissão'),
('Dar Alta',                   'internacao_alta',          'Registrar alta do paciente internado'),
('Transferir Paciente',        'internacao_transferir',    'Transferir paciente entre leitos ou alas'),

-- Farmácia Hospitalar
('Visualizar Farmácia',        'farmacia_view',            'Visualizar dashboard e movimentações da farmácia'),
('Dispensar Medicamentos',     'farmacia_dispensar',       'Realizar dispensação de medicamentos'),
('Devolver Medicamentos',      'farmacia_devolver',        'Registrar devolução de medicamentos'),
('Controlados',                'farmacia_controlados',     'Acessar e gerenciar medicamentos controlados'),

-- Enfermagem
('Visualizar Enfermagem',      'enfermagem_view',          'Visualizar painel de enfermagem e evoluções'),
('Registrar Evolução',         'enfermagem_registrar',     'Registrar evolução, sinais vitais e prescrições de enfermagem'),
('Excluir Evolução',           'enfermagem_deletar',       'Excluir registros de evolução de enfermagem'),

-- Escala / Plantão
('Visualizar Escala',          'escala_view',              'Visualizar escala de plantão'),
('Gerenciar Escala',           'escala_gerenciar',         'Criar e editar escalas de plantão e turnos'),

-- Conta do Paciente
('Visualizar Conta Paciente',  'conta_view',               'Visualizar resumo financeiro do paciente internado'),
('Gerenciar Conta Paciente',   'conta_gerenciar',          'Lançar itens e diárias na conta do paciente'),
('Imprimir Conta',             'conta_imprimir',           'Imprimir resumo/fatura da conta do paciente'),

-- Centro Cirúrgico
('Visualizar Centro Cirúrgico','centro_cirurgico_view',    'Visualizar agenda e mapa do centro cirúrgico'),
('Agendar Cirurgia',           'centro_cirurgico_agendar', 'Agendar e gerenciar procedimentos cirúrgicos'),
('Gerenciar Centro Cirúrgico', 'centro_cirurgico_manage',  'Gerenciar salas, equipamentos e configurações do CC'),

-- Sumário de Alta
('Visualizar Sumário de Alta', 'sumario_alta_view',        'Visualizar sumário de alta do paciente'),
('Editar Sumário de Alta',     'sumario_alta_editar',      'Preencher e editar sumário de alta'),
('Assinar Sumário de Alta',    'sumario_alta_assinar',     'Assinar digitalmente o sumário de alta'),

-- SADT
('Visualizar SADT',            'sadt_view',                'Visualizar solicitações de exames'),
('Solicitar Exames (SADT)',    'sadt_create',              'Criar solicitações de exames e procedimentos'),
('Lançar Resultado SADT',      'sadt_resultado',           'Registrar resultado de exame'),
('Cancelar SADT',              'sadt_cancelar',            'Cancelar solicitação de exame');

-- =============================================================================
-- 2. NOVOS PERFIS HOSPITALARES
-- =============================================================================

INSERT IGNORE INTO perfis (id, nome, descricao, status) VALUES
(4, 'Enfermeiro',              'Acesso a leitos, enfermagem, farmácia e escalas',         1),
(5, 'Farmacêutico',            'Acesso à farmácia hospitalar, estoque e CME',             1),
(6, 'Técnico de Enfermagem',   'Acesso básico a leitos, evolução e farmácia',             1),
(7, 'Administrador Hospitalar','Acesso financeiro, conta paciente e relatórios',          1),
(8, 'Cirurgião',               'Acesso ao centro cirúrgico, internação e prontuário',     1),
(9, 'Nutricionista',           'Acesso ao módulo de nutrição e avaliações',               1),
(10,'Técnico CME',             'Acesso ao módulo de esterilização e rastreamento',        1);

-- =============================================================================
-- 3. ATRIBUIÇÃO DE PERMISSÕES POR PERFIL
-- =============================================================================

-- ── Perfil 1: Administrador — todas as permissões (garante novos itens) ──────
INSERT IGNORE INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 1, id FROM permissoes;

-- ── Perfil 2: Médico ──────────────────────────────────────────────────────────
INSERT IGNORE INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 2, id FROM permissoes WHERE chave IN (
    -- Sistema
    'dashboard_view',
    -- Agendamentos
    'appointment_view', 'appointment_create',
    -- Prontuário
    'prontuario_view_basic', 'prontuario_view_clinical', 'prontuario_create',
    'prontuario_edit', 'prontuario_print', 'prontuario_atestado',
    'prontuario_prescricao', 'prontuario_solicitacao_exames',
    -- Internação
    'internacao_view', 'internacao_create', 'internacao_alta', 'internacao_transferir',
    -- Leitos
    'leitos_view',
    -- SADT
    'sadt_view', 'sadt_create', 'sadt_resultado', 'sadt_cancelar',
    -- Nutrição
    'nutricao_view', 'nutricao_create', 'nutricao_edit', 'nutricao_avaliar',
    -- Centro Cirúrgico
    'centro_cirurgico_view', 'centro_cirurgico_agendar',
    -- Sumário de Alta
    'sumario_alta_view', 'sumario_alta_editar', 'sumario_alta_assinar',
    -- Conta (visualizar)
    'conta_view',
    -- Resultados
    'resultados_online_view',
    -- Painel
    'painel_profissional', 'dashboard_realtime',
    -- Notificações
    'notificacoes_ver'
);

-- ── Perfil 3: Recepcionista ───────────────────────────────────────────────────
INSERT IGNORE INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 3, id FROM permissoes WHERE chave IN (
    'dashboard_view',
    'appointment_view', 'appointment_create',
    'prontuario_view_basic',
    'leitos_view',
    'internacao_view',
    'conta_view',
    'resultados_online_view',
    'painel_recepcao',
    'notificacoes_ver'
);

-- ── Perfil 4: Enfermeiro ──────────────────────────────────────────────────────
INSERT IGNORE INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 4, id FROM permissoes WHERE chave IN (
    'dashboard_view',
    -- Leitos
    'leitos_view', 'leitos_manage',
    -- Internação
    'internacao_view', 'internacao_transferir',
    -- Enfermagem
    'enfermagem_view', 'enfermagem_registrar', 'enfermagem_deletar',
    -- Farmácia
    'farmacia_view', 'farmacia_dispensar', 'farmacia_devolver',
    -- Escala
    'escala_view',
    -- SADT (visualizar)
    'sadt_view',
    -- Sumário de Alta
    'sumario_alta_view',
    -- Prontuário
    'prontuario_view_clinical',
    -- Conta
    'conta_view',
    -- Notificações
    'notificacoes_ver'
);

-- ── Perfil 5: Farmacêutico ────────────────────────────────────────────────────
INSERT IGNORE INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 5, id FROM permissoes WHERE chave IN (
    'dashboard_view',
    -- Farmácia
    'farmacia_view', 'farmacia_dispensar', 'farmacia_devolver', 'farmacia_controlados',
    -- Estoque
    'estoque_view', 'estoque_manage',
    -- CME
    'cme_view', 'cme_artigos', 'cme_ciclos', 'cme_rastrear', 'cme_manage',
    -- Internação (visualizar)
    'internacao_view',
    -- Notificações
    'notificacoes_ver'
);

-- ── Perfil 6: Técnico de Enfermagem ──────────────────────────────────────────
INSERT IGNORE INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 6, id FROM permissoes WHERE chave IN (
    'dashboard_view',
    -- Leitos
    'leitos_view',
    -- Internação
    'internacao_view',
    -- Enfermagem
    'enfermagem_view', 'enfermagem_registrar',
    -- Farmácia
    'farmacia_view', 'farmacia_dispensar',
    -- SADT
    'sadt_view',
    -- Escala
    'escala_view',
    -- Notificações
    'notificacoes_ver'
);

-- ── Perfil 7: Administrador Hospitalar ───────────────────────────────────────
INSERT IGNORE INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 7, id FROM permissoes WHERE chave IN (
    'dashboard_view', 'dashboard_realtime',
    -- Internação
    'internacao_view',
    -- Leitos
    'leitos_view',
    -- Conta Paciente
    'conta_view', 'conta_gerenciar', 'conta_imprimir',
    -- Financeiro
    'financeiro_view', 'financeiro_lancar', 'financeiro_conciliar',
    'caixa_view', 'caixa_acessar', 'caixa_manage',
    'repasse_view',
    -- Relatórios
    'report_view', 'relatorios_dinamicos',
    -- Usuários / Perfis
    'user_manage',
    -- Configurações
    'config_view',
    -- Notificações
    'notificacoes_ver'
);

-- ── Perfil 8: Cirurgião ───────────────────────────────────────────────────────
INSERT IGNORE INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 8, id FROM permissoes WHERE chave IN (
    'dashboard_view',
    -- Centro Cirúrgico
    'centro_cirurgico_view', 'centro_cirurgico_agendar',
    -- Internação
    'internacao_view', 'internacao_create', 'internacao_alta',
    -- Prontuário
    'prontuario_view_clinical', 'prontuario_create', 'prontuario_edit',
    'prontuario_print', 'prontuario_atestado', 'prontuario_prescricao',
    'prontuario_solicitacao_exames',
    -- SADT
    'sadt_view', 'sadt_create', 'sadt_resultado',
    -- Sumário de Alta
    'sumario_alta_view', 'sumario_alta_editar', 'sumario_alta_assinar',
    -- Leitos
    'leitos_view',
    -- Notificações
    'notificacoes_ver',
    -- Painel
    'painel_profissional'
);

-- ── Perfil 9: Nutricionista ───────────────────────────────────────────────────
INSERT IGNORE INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 9, id FROM permissoes WHERE chave IN (
    'dashboard_view',
    -- Nutrição
    'nutricao_view', 'nutricao_create', 'nutricao_edit',
    'nutricao_delete', 'nutricao_avaliar',
    -- Internação (visualizar)
    'internacao_view',
    -- Leitos (visualizar)
    'leitos_view',
    -- Prontuário (visualizar)
    'prontuario_view_clinical',
    -- Notificações
    'notificacoes_ver'
);

-- ── Perfil 10: Técnico CME ────────────────────────────────────────────────────
INSERT IGNORE INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 10, id FROM permissoes WHERE chave IN (
    'dashboard_view',
    -- CME
    'cme_view', 'cme_artigos', 'cme_ciclos', 'cme_rastrear',
    -- Notificações
    'notificacoes_ver'
);

SET foreign_key_checks = 1;

-- =============================================================================
-- Resumo dos perfis criados:
--
--  ID | Perfil                  | Módulos principais
-- ----+-------------------------+------------------------------------------
--   1 | Administrador           | Tudo
--   2 | Médico                  | Prontuário, Internação, SADT, Nutrição, CC
--   3 | Recepcionista           | Agendamentos, Leitos(v), Internação(v)
--   4 | Enfermeiro              | Leitos, Enfermagem, Farmácia, Escala
--   5 | Farmacêutico            | Farmácia, Estoque, CME completo
--   6 | Técnico de Enfermagem   | Leitos(v), Enfermagem, Farmácia(v)
--   7 | Administrador Hospitalar| Conta Paciente, Financeiro, Relatórios
--   8 | Cirurgião               | Centro Cirúrgico, Internação, Prontuário
--   9 | Nutricionista           | Nutrição completa, Internação(v)
--  10 | Técnico CME             | CME completo
-- =============================================================================
