-- 2026-04-15
-- Libera TIIXHEALTH, Agendamento Manual, Pacientes, Agendamentos e Pre-Agendamentos
-- para grupos operacionais, apoiado no novo recorte de dados por empresa/unidade/profissional.
-- Idempotente.

START TRANSACTION;

SET @menu_id := 35;

SET @root_tiixhealth_id := (
  SELECT id
    FROM wpjy_menus_items
   WHERE menu = @menu_id
     AND slug = 'menu.adm.tiixhealth'
   ORDER BY CASE WHEN area = 'adm' THEN 0 WHEN area IS NULL OR area = '' THEN 1 ELSE 2 END, id ASC
   LIMIT 1
);

-- 1) Garantir o item Agendamento Manual dentro de TIIXHEALTH
INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT
  'Agendamento Manual',
  'agendamento-manual',
  'adm',
  @root_tiixhealth_id,
  2,
  @menu_id,
  '_self',
  'lucide:calendar-plus',
  'menu.admin.agendamento_manual',
  'agendamento_manual',
  NULL
WHERE @root_tiixhealth_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
      FROM wpjy_menus_items
     WHERE menu = @menu_id
       AND parent = @root_tiixhealth_id
       AND slug = 'menu.admin.agendamento_manual'
  );

-- 2) Garantir que todas as permissoes de menu existam
INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.admin.pacientes', 'Menu - Pacientes', 'Exibir item de menu Pacientes em TIIXHEALTH', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.admin.pacientes');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.admin.agendamentos', 'Menu - Agendamentos', 'Exibir item de menu Agendamentos em TIIXHEALTH', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.admin.agendamentos');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.admin.pre_agendamentos', 'Menu - Pre-Agendamentos', 'Exibir item de menu Pre-Agendamentos em TIIXHEALTH', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.admin.pre_agendamentos');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.admin.agendamentos_pendentes', 'Menu - Agendamentos Pendentes', 'Exibir preset Pendentes em Agendamentos', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.admin.agendamentos_pendentes');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.admin.agendamentos_comparecimento', 'Menu - Agendamentos Comparecimento', 'Exibir preset Comparecimento em Agendamentos', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.admin.agendamentos_comparecimento');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.admin.agendamentos_finalizacao', 'Menu - Agendamentos Finalizacao', 'Exibir preset Finalizacao em Agendamentos', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.admin.agendamentos_finalizacao');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.admin.agendamentos_finalizados', 'Menu - Agendamentos Finalizados', 'Exibir preset Finalizados em Agendamentos', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.admin.agendamentos_finalizados');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.admin.agendamentos_cancelados', 'Menu - Agendamentos Cancelados', 'Exibir preset Cancelamentos em Agendamentos', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.admin.agendamentos_cancelados');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.admin.agendamentos_faltas', 'Menu - Agendamentos Faltas', 'Exibir preset Faltas em Agendamentos', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.admin.agendamentos_faltas');

-- 3) Liberar raiz e filhos do TIIXHEALTH para os grupos operacionais combinados
INSERT INTO wpjy_grupo_permissao (id_grupo, id_permissao)
SELECT g.id, p.id
  FROM wpjy_grupos_permissoes g
  JOIN wpjy_permissoes p
    ON p.slug IN (
      'menu.adm.tiixhealth',
      'menu.admin.agendamento_manual',
      'admin.agendamento_manual.view',
      'menu.admin.pacientes',
      'menu.admin.agendamentos',
      'menu.admin.pre_agendamentos',
      'menu.admin.agendamentos_pendentes',
      'menu.admin.agendamentos_comparecimento',
      'menu.admin.agendamentos_finalizacao',
      'menu.admin.agendamentos_finalizados',
      'menu.admin.agendamentos_cancelados',
      'menu.admin.agendamentos_faltas'
    )
 WHERE g.slug IN (
   'tiix',
   'empresa',
   'assistentes-unidade',
   'profissionais',
   'clientes',
   'corretora',
   'corretor'
 )
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_grupo_permissao gp
      WHERE gp.id_grupo = g.id
        AND gp.id_permissao = p.id
   );

COMMIT;

SELECT
  @root_tiixhealth_id AS root_tiixhealth_id;

SELECT id, label, link, area, parent, sort, slug
  FROM wpjy_menus_items
 WHERE menu = @menu_id
   AND (
     id = @root_tiixhealth_id
     OR parent = @root_tiixhealth_id
   )
 ORDER BY parent, sort, id;

SELECT p.slug, g.slug AS group_slug, g.id_contrato
  FROM wpjy_grupo_permissao gp
  JOIN wpjy_grupos_permissoes g ON g.id = gp.id_grupo
  JOIN wpjy_permissoes p ON p.id = gp.id_permissao
 WHERE p.slug IN (
   'menu.adm.tiixhealth',
   'menu.admin.agendamento_manual',
   'admin.agendamento_manual.view',
   'menu.admin.pacientes',
   'menu.admin.agendamentos',
   'menu.admin.pre_agendamentos',
   'menu.admin.agendamentos_pendentes',
   'menu.admin.agendamentos_comparecimento',
   'menu.admin.agendamentos_finalizacao',
   'menu.admin.agendamentos_finalizados',
   'menu.admin.agendamentos_cancelados',
   'menu.admin.agendamentos_faltas'
 )
   AND g.slug IN (
     'tiix',
     'empresa',
     'assistentes-unidade',
     'profissionais',
     'clientes',
     'corretora',
     'corretor'
   )
 ORDER BY p.slug, g.slug, g.id_contrato;
