-- ══════════════════════════════════════════════════════════════════════
-- Migration v89: Reestruturação de perfis por contexto de uso
--
-- GRUPO 1 — Minha Clínica
--   Gestor de Clínica | Médico (Minha Clínica) | Recepcionista (Minha Clínica)
--
-- GRUPO 2 — Clínicas Parceiras (Encaminhamentos)
--   Gestor de Encaminhamentos | Operador de Encaminhamentos | Médico Encaminhador
--
-- GRUPO 3 — Hospital
--   Administrador Hospitalar | Médico Hospitalar | Cirurgião
--   Enfermeiro | Técnico de Enfermagem | Farmacêutico
--   Nutricionista | Técnico CME | Recepcionista Hospitalar
-- ══════════════════════════════════════════════════════════════════════

-- ──────────────────────────────────────────────
-- 1. Renomear perfis existentes
-- ──────────────────────────────────────────────
UPDATE perfis SET nome = 'Médico Hospitalar'           WHERE id = 2;
UPDATE perfis SET nome = 'Operador de Encaminhamentos' WHERE id = 3;

-- ──────────────────────────────────────────────
-- 2. Inserir novos perfis (se ainda não existirem)
-- ──────────────────────────────────────────────
INSERT IGNORE INTO perfis (nome, status) VALUES
  ('Gestor de Clínica',             1),
  ('Médico (Minha Clínica)',        1),
  ('Recepcionista (Minha Clínica)', 1),
  ('Gestor de Encaminhamentos',     1),
  ('Médico Encaminhador',           1),
  ('Recepcionista Hospitalar',      1);

-- ──────────────────────────────────────────────
-- 3. Limpar permissões dos perfis gerenciados
--    (perfis 2–10 + novos pelo nome)
-- ──────────────────────────────────────────────
DELETE FROM perfil_permissoes WHERE perfil_id IN (
  SELECT id FROM perfis WHERE id BETWEEN 2 AND 10
  OR nome IN (
    'Gestor de Clínica','Médico (Minha Clínica)','Recepcionista (Minha Clínica)',
    'Gestor de Encaminhamentos','Operador de Encaminhamentos',
    'Médico Encaminhador','Recepcionista Hospitalar'
  )
);

-- ══════════════════════════════════════════════
-- GRUPO 3 — HOSPITAL
-- ══════════════════════════════════════════════

-- ── ID 2: Médico Hospitalar ────────────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 2, id FROM permissoes WHERE chave IN (
  'dashboard_view','notificacoes_ver','pacientes_acessar',
  'leitos_view',
  'internacao_view','internacao_create','internacao_alta','internacao_transferir',
  'sadt_view','sadt_create','sadt_resultado','sadt_acessar',
  'prescricao_view','prescricao_create','prescricao_editar',
  'prontuario_view_basic','prontuario_view_clinical','prontuario_create','prontuario_edit',
  'prontuario_print','prontuario_paciente','prontuario_atestado','prontuario_prescricao',
  'prontuario_solicitacao_exames',
  'sumario_alta_view','sumario_alta_editar','sumario_alta_assinar',
  'regulacao_view','indicadores_view','painel_profissional',
  'pacs_view','pacs_solicitar',
  'lis_view','lis_solicitar',
  'balanco_view','ccih_view'
);

-- ── ID 4: Enfermeiro ────────────────────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 4, id FROM permissoes WHERE chave IN (
  'dashboard_view','notificacoes_ver','pacientes_acessar',
  'leitos_view','leitos_manage',
  'internacao_view','internacao_create','internacao_alta','internacao_transferir',
  'enfermagem_view','enfermagem_registrar','enfermagem_deletar',
  'sadt_view','sadt_create',
  'prescricao_view',
  'prontuario_view_clinical','prontuario_paciente',
  'sumario_alta_view',
  'balanco_view','balanco_registrar',
  'triagem_view','triagem_realizar','triagem_chamar',
  'visitas_view','visitas_create',
  'higienizacao_view',
  'regulacao_view',
  'fila_enfermagem',
  'ponto_view','ponto_registrar',
  'lis_view','lis_solicitar',
  'ccih_view','ccih_registrar'
);

-- ── ID 5: Farmacêutico ──────────────────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 5, id FROM permissoes WHERE chave IN (
  'dashboard_view','notificacoes_ver','pacientes_acessar',
  'farmacia_view','farmacia_dispensar','farmacia_devolver','farmacia_controlados','farmacia_acessar',
  'estoque_acessar',
  'prescricao_view',
  'internacao_view','leitos_view',
  'cme_view','cme_artigos','cme_ciclos','cme_manage','cme_rastrear',
  'ponto_view','ponto_registrar'
);

-- ── ID 6: Técnico de Enfermagem ─────────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 6, id FROM permissoes WHERE chave IN (
  'dashboard_view','notificacoes_ver','pacientes_acessar',
  'leitos_view','internacao_view',
  'enfermagem_view','enfermagem_registrar',
  'sadt_view','prescricao_view',
  'balanco_view','balanco_registrar',
  'triagem_view','triagem_realizar',
  'visitas_view','visitas_create',
  'higienizacao_view','higienizacao_manage',
  'fila_enfermagem',
  'ponto_view','ponto_registrar'
);

-- ── ID 7: Administrador Hospitalar ─────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 7, id FROM permissoes WHERE chave IN (
  'dashboard_view','dashboard_realtime','notificacoes_ver',
  'pacientes_acessar','pacientes_criar','pacientes_editar',
  'leitos_view','leitos_manage',
  'internacao_view','internacao_create','internacao_alta','internacao_transferir',
  'farmacia_view','farmacia_dispensar','farmacia_devolver','farmacia_controlados','farmacia_acessar',
  'estoque_acessar',
  'enfermagem_view','enfermagem_registrar','enfermagem_deletar',
  'indicadores_view',
  'prescricao_view','prescricao_create','prescricao_editar','prescricao_deletar',
  'ccih_view','ccih_registrar','ccih_gerenciar',
  'escala_view','escala_gerenciar',
  'conta_view','conta_gerenciar','conta_imprimir',
  'sadt_view','sadt_create','sadt_resultado','sadt_cancelar','sadt_acessar',
  'nutricao_view','nutricao_create','nutricao_edit','nutricao_delete','nutricao_avaliar',
  'cme_view','cme_artigos','cme_ciclos','cme_manage','cme_rastrear',
  'higienizacao_view','higienizacao_manage',
  'visitas_view','visitas_create',
  'boletim_view',
  'balanco_view','balanco_registrar',
  'aih_view','aih_create','aih_enviar',
  'centro_cirurgico_view','centro_cirurgico_agendar','centro_cirurgico_manage',
  'regulacao_view','regulacao_manage',
  'lis_view','lis_solicitar','lis_resultado',
  'pacs_view','pacs_solicitar',
  'glosas_view','glosas_create','glosas_recurso',
  'sumario_alta_view','sumario_alta_editar','sumario_alta_assinar',
  'triagem_view','triagem_realizar','triagem_chamar',
  'ponto_view','ponto_registrar','ponto_gerenciar',
  'competencias_view','competencias_manage',
  'cobertura_view','cobertura_manage',
  'ouvidoria_view','ouvidoria_create','ouvidoria_responder',
  'financeiro_view','financeiro_lancar','financeiro_conciliar',
  'caixa_view','caixa_acessar','caixa_manage',
  'relatorios_acessar','report_view','relatorios_dinamicos_view',
  'prontuario_view_basic','prontuario_view_clinical',
  'user_manage','config_view'
);

-- ── ID 8: Cirurgião ─────────────────────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 8, id FROM permissoes WHERE chave IN (
  'dashboard_view','notificacoes_ver','pacientes_acessar',
  'leitos_view',
  'internacao_view','internacao_create','internacao_alta','internacao_transferir',
  'centro_cirurgico_view','centro_cirurgico_agendar',
  'sadt_view','sadt_create','sadt_resultado','sadt_acessar',
  'prescricao_view','prescricao_create','prescricao_editar',
  'prontuario_view_basic','prontuario_view_clinical','prontuario_create','prontuario_edit',
  'prontuario_print','prontuario_paciente','prontuario_atestado','prontuario_prescricao',
  'prontuario_solicitacao_exames',
  'sumario_alta_view','sumario_alta_editar','sumario_alta_assinar',
  'pacs_view','pacs_solicitar',
  'painel_profissional'
);

-- ── ID 9: Nutricionista ─────────────────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 9, id FROM permissoes WHERE chave IN (
  'dashboard_view','notificacoes_ver','pacientes_acessar',
  'leitos_view','internacao_view',
  'nutricao_view','nutricao_create','nutricao_edit','nutricao_delete','nutricao_avaliar',
  'prontuario_view_clinical',
  'ponto_view','ponto_registrar'
);

-- ── ID 10: Técnico CME ──────────────────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 10, id FROM permissoes WHERE chave IN (
  'dashboard_view','notificacoes_ver',
  'cme_view','cme_artigos','cme_ciclos','cme_rastrear',
  'ponto_view','ponto_registrar'
);

-- ── Recepcionista Hospitalar ────────────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT p.id, pm.id FROM perfis p
CROSS JOIN permissoes pm
WHERE p.nome = 'Recepcionista Hospitalar'
  AND pm.chave IN (
    'dashboard_view','notificacoes_ver',
    'leitos_view',
    'internacao_view','internacao_create',
    'regulacao_view','regulacao_manage',
    'conta_view',
    'pacientes_acessar','pacientes_criar','pacientes_editar',
    'fila_recepcao','painel_recepcao',
    'visitas_view','visitas_create',
    'triagem_view','triagem_chamar',
    'ponto_view','ponto_registrar'
  );

-- ══════════════════════════════════════════════
-- GRUPO 2 — CLÍNICAS PARCEIRAS (Encaminhamentos)
-- ══════════════════════════════════════════════

-- ── ID 3: Operador de Encaminhamentos ──────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT 3, id FROM permissoes WHERE chave IN (
  'dashboard_view','notificacoes_ver',
  'appointment_view','appointment_create',
  'pacientes_acessar','pacientes_criar','pacientes_editar',
  'prontuario_view_basic',
  'fila_recepcao','painel_recepcao',
  'caixa_acessar','caixa_abrir_fechar',
  'resultados_online_view'
);

-- ── Gestor de Encaminhamentos ───────────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT p.id, pm.id FROM perfis p
CROSS JOIN permissoes pm
WHERE p.nome = 'Gestor de Encaminhamentos'
  AND pm.chave IN (
    'dashboard_view','dashboard_realtime','notificacoes_ver',
    'appointment_view','appointment_create',
    'price_manage',
    'repasse_view','repasse_manage',
    'pacientes_acessar','pacientes_criar','pacientes_editar','pacientes_deletar',
    'prontuario_view_basic',
    'fila_recepcao','fila_gerenciar',
    'painel_recepcao','painel_display','painel_manage',
    'caixa_view','caixa_acessar','caixa_manage',
    'caixa_abrir_fechar','caixa_gerenciar_todos','caixa_estornar',
    'financeiro_view','financeiro_lancar','financeiro_conciliar',
    'relatorios_acessar','report_view','relatorios_dinamicos_view',
    'user_manage','config_view',
    'ouvidoria_view','ouvidoria_responder'
  );

-- ── Médico Encaminhador ─────────────────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT p.id, pm.id FROM perfis p
CROSS JOIN permissoes pm
WHERE p.nome = 'Médico Encaminhador'
  AND pm.chave IN (
    'dashboard_view','notificacoes_ver',
    'appointment_view','appointment_create',
    'pacientes_acessar',
    'prontuario_view_basic',
    'repasse_view'
  );

-- ══════════════════════════════════════════════
-- GRUPO 1 — MINHA CLÍNICA
-- ══════════════════════════════════════════════

-- ── Gestor de Clínica ───────────────────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT p.id, pm.id FROM perfis p
CROSS JOIN permissoes pm
WHERE p.nome = 'Gestor de Clínica'
  AND pm.chave IN (
    'dashboard_view','notificacoes_ver',
    'master_dashboard','master_agendamentos','master_especialidades','master_procedimentos',
    'master_profissionais','master_financeiro','master_agenda_medica','master_consultorios',
    'minha_clinica_ver','minha_clinica_editar','minha_clinica_config',
    'minha_clinica_financeiro','minha_clinica_pacientes',
    'pacientes_acessar','pacientes_criar','pacientes_editar','pacientes_deletar',
    'prontuario_view_basic','prontuario_view_clinical','prontuario_create','prontuario_edit',
    'prontuario_print','prontuario_history',
    'resultados_online_view','resultados_online_manage',
    'relatorios_acessar','report_view',
    'user_manage','config_view','config_personalize',
    'whatsapp_acessar_mc',
    'painel_profissional','painel_recepcao','painel_display',
    'caixa_view','caixa_acessar','caixa_manage'
  );

-- ── Médico (Minha Clínica) ──────────────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT p.id, pm.id FROM perfis p
CROSS JOIN permissoes pm
WHERE p.nome = 'Médico (Minha Clínica)'
  AND pm.chave IN (
    'dashboard_view','notificacoes_ver',
    'master_dashboard','master_agenda_medica',
    'minha_clinica_ver','minha_clinica_pacientes',
    'pacientes_acessar',
    'prontuario_view_basic','prontuario_view_clinical','prontuario_create','prontuario_edit',
    'prontuario_print','prontuario_paciente','prontuario_atestado','prontuario_prescricao',
    'prontuario_solicitacao_exames',
    'resultados_online_view',
    'painel_profissional'
  );

-- ── Recepcionista (Minha Clínica) ───────────────
INSERT INTO perfil_permissoes (perfil_id, permissao_id)
SELECT p.id, pm.id FROM perfis p
CROSS JOIN permissoes pm
WHERE p.nome = 'Recepcionista (Minha Clínica)'
  AND pm.chave IN (
    'dashboard_view','notificacoes_ver',
    'master_dashboard','master_agendamentos',
    'minha_clinica_ver','minha_clinica_pacientes',
    'pacientes_acessar','pacientes_criar','pacientes_editar',
    'prontuario_view_basic',
    'painel_recepcao'
  );

-- ──────────────────────────────────────────────
-- Verificação final
-- ──────────────────────────────────────────────
SELECT p.id, p.nome,
       COUNT(pp.permissao_id) AS total_permissoes
FROM perfis p
LEFT JOIN perfil_permissoes pp ON pp.perfil_id = p.id
GROUP BY p.id, p.nome
ORDER BY p.id;
