-- 2026-04-16
-- TIIX HEALTH como raiz de primeiro nivel com Agendamentos em ate 3 niveis
-- Objetivos:
-- 1) garantir TIIX HEALTH em parent = 0
-- 2) expor os itens de saude de empresa e unidade abaixo do root global
-- 3) manter Agendamentos no segundo nivel e presets no terceiro
-- 4) permitir aplicar esta migration mesmo sem executar a 11 antes

START TRANSACTION;

SET @menu_id = 35;

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.tiixhealth.operacional', 'Menu - TIIX HEALTH', 'Exibir o root TIIX HEALTH no primeiro nivel do menu', NULL, 'menu'
WHERE NOT EXISTS (
  SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.tiixhealth.operacional'
);

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 = 'menu.tiixhealth.operacional'
 WHERE g.slug IN ('tiix', 'empresa', 'empresas', 'assistente', 'assistentes-unidade', 'unidade', 'unidades', 'profissionais')
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_grupo_permissao gp
      WHERE gp.id_grupo = g.id
        AND gp.id_permissao = p.id
   );

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'acl.parceiros.nutricionistas.visualizar', 'Nutricionistas - Visualizar', 'Visualizar listagens de nutricionistas', NULL, 'acl'
WHERE NOT EXISTS (
  SELECT 1 FROM wpjy_permissoes WHERE slug = 'acl.parceiros.nutricionistas.visualizar'
);

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 = 'acl.parceiros.nutricionistas.visualizar'
 WHERE g.slug IN ('tiix', 'empresa', 'empresas', 'assistente', 'assistentes-unidade', 'unidade', 'unidades', 'profissionais')
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_grupo_permissao gp
      WHERE gp.id_grupo = g.id
        AND gp.id_permissao = p.id
   );

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'empresa/nutricionistas', 'Empresa - Nutricionistas', 'Listagem contextual de nutricionistas da empresa', 'ti ti-apple', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'empresa/nutricionistas');

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'unidade/nutricionistas', 'Unidade - Nutricionistas', 'Listagem contextual de nutricionistas da unidade', 'ti ti-apple', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'unidade/nutricionistas');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'empresa.nutricionistas', 'Empresa: Nutricionistas', 'Listagem contextual de nutricionistas da empresa', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'empresa.nutricionistas');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'unidade.nutricionistas', 'Unidade: Nutricionistas', 'Listagem contextual de nutricionistas da unidade', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'unidade.nutricionistas');

INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
VALUES ('pages/empresa/nutricionistas.php', 'empresa.nutricionistas', 0)
ON DUPLICATE KEY UPDATE ns = VALUES(ns), sensivel = VALUES(sensivel);

INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
VALUES ('pages/unidade/nutricionistas.php', 'unidade.nutricionistas', 0)
ON DUPLICATE KEY UPDATE ns = VALUES(ns), sensivel = VALUES(sensivel);

INSERT INTO wpjy_perm_kit_namespace (kit_id, namespace_id, effect)
SELECT k.id, n.id, 'allow'
  FROM wpjy_perm_kits k
  JOIN wpjy_perm_namespaces n ON n.ns = 'empresa.nutricionistas'
 WHERE k.slug = 'kit.empresa'
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_perm_kit_namespace kn
      WHERE kn.kit_id = k.id
        AND kn.namespace_id = n.id
   );

INSERT INTO wpjy_perm_kit_namespace (kit_id, namespace_id, effect)
SELECT k.id, n.id, 'allow'
  FROM wpjy_perm_kits k
  JOIN wpjy_perm_namespaces n ON n.ns = 'unidade.nutricionistas'
 WHERE k.slug = 'kit.assistente'
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_perm_kit_namespace kn
      WHERE kn.kit_id = k.id
        AND kn.namespace_id = n.id
   );

INSERT INTO wpjy_perm_tela_kit_map (id_tela, kit_id, prioridade)
SELECT t.id, k.id, 100
  FROM wpjy_telas t
  JOIN wpjy_perm_kits k ON k.slug = 'kit.empresa'
 WHERE t.arquivo = 'empresa/nutricionistas'
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_perm_tela_kit_map tk
      WHERE tk.id_tela = t.id
        AND tk.kit_id = k.id
   );

INSERT INTO wpjy_perm_tela_kit_map (id_tela, kit_id, prioridade)
SELECT t.id, k.id, 100
  FROM wpjy_telas t
  JOIN wpjy_perm_kits k ON k.slug = 'kit.assistente'
 WHERE t.arquivo = 'unidade/nutricionistas'
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_perm_tela_kit_map tk
      WHERE tk.id_tela = t.id
        AND tk.kit_id = k.id
   );

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT
  'TIIX HEALTH',
  '#',
  NULL,
  0,
  5,
  @menu_id,
  '_self',
  'lucide:heart-pulse',
  'menu.tiixhealth.operacional',
  'tiix_health_root',
  NULL
WHERE NOT EXISTS (
  SELECT 1
    FROM wpjy_menus_items
   WHERE menu = @menu_id
     AND slug = 'menu.tiixhealth.operacional'
);

SET @tiix_root_id = (
  SELECT id
    FROM wpjy_menus_items
   WHERE menu = @menu_id
     AND slug = 'menu.tiixhealth.operacional'
   ORDER BY id ASC
   LIMIT 1
);

UPDATE wpjy_menus_items
   SET parent = 0,
       area = NULL,
       sort = 5,
       label = 'TIIX HEALTH',
       link = '#',
       icon = 'lucide:heart-pulse'
 WHERE id = @tiix_root_id;

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Agendamentos', '#', 'empresa', @tiix_root_id, 5, @menu_id, '_self', 'ti ti-calendar-event', 'menu.empresa.agendamentos_root_top', 'empresa_agendamentos_root_top', NULL
WHERE @tiix_root_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
      FROM wpjy_menus_items
     WHERE menu = @menu_id
       AND area = 'empresa'
       AND slug = 'menu.empresa.agendamentos_root_top'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Agendamentos', '#', 'unidade', @tiix_root_id, 26, @menu_id, '_self', 'ti ti-calendar-event', 'menu.unidade.agendamentos_root_top', 'unidade_agendamentos_root_top', NULL
WHERE @tiix_root_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
      FROM wpjy_menus_items
     WHERE menu = @menu_id
       AND area = 'unidade'
       AND slug = 'menu.unidade.agendamentos_root_top'
  );

SET @empresa_ag_root = (
  SELECT id
    FROM wpjy_menus_items
   WHERE menu = @menu_id
     AND area = 'empresa'
     AND slug = 'menu.empresa.agendamentos_root_top'
   ORDER BY id ASC
   LIMIT 1
);

SET @unidade_ag_root = (
  SELECT id
    FROM wpjy_menus_items
   WHERE menu = @menu_id
     AND area = 'unidade'
     AND slug = 'menu.unidade.agendamentos_root_top'
   ORDER BY id ASC
   LIMIT 1
);

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Nutricionistas', 'nutricionistas', 'empresa', @tiix_root_id, 2, @menu_id, '_self', 'ti ti-apple', 'empresa-nutricionistas', 'empresa_nutricionistas', NULL
WHERE @tiix_root_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'empresa' AND slug = 'empresa-nutricionistas'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Nutricionistas', 'nutricionistas', 'unidade', @tiix_root_id, 23, @menu_id, '_self', 'ti ti-apple', 'menu.unidade.nutricionistas', 'unidade_nutricionistas', NULL
WHERE @tiix_root_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'unidade' AND slug = 'menu.unidade.nutricionistas'
  );

UPDATE wpjy_menus_items
   SET parent = @tiix_root_id,
       sort = CASE
         WHEN area = 'empresa' AND link = 'profissionais' THEN 0
         WHEN area = 'empresa' AND link = 'medicos' THEN 1
         WHEN area = 'empresa' AND link = 'nutricionistas' THEN 2
         WHEN area = 'empresa' AND link = 'pacientes' THEN 3
         WHEN area = 'empresa' AND link = 'disponibilidade' THEN 4
         WHEN area = 'empresa' AND slug = 'menu.empresa.agendamentos_root_top' THEN 5
         WHEN area = 'empresa' AND link = 'agendamento-manual' THEN 6
         WHEN area = 'empresa' AND link = 'pre-agendamentos' THEN 7
         WHEN area = 'unidade' AND link = 'agenda' THEN 20
         WHEN area = 'unidade' AND link = 'profissionais' THEN 21
         WHEN area = 'unidade' AND link = 'medicos' THEN 22
         WHEN area = 'unidade' AND link = 'nutricionistas' THEN 23
         WHEN area = 'unidade' AND link = 'pacientes' THEN 24
         WHEN area = 'unidade' AND link = 'disponibilidade' THEN 25
         WHEN area = 'unidade' AND slug = 'menu.unidade.agendamentos_root_top' THEN 26
         WHEN area = 'unidade' AND link = 'agendamento-manual' THEN 27
         WHEN area = 'unidade' AND link = 'pre-agendamentos' THEN 28
         ELSE sort
       END
 WHERE @tiix_root_id IS NOT NULL
   AND menu = @menu_id
   AND (
        (area = 'empresa' AND link IN ('profissionais', 'medicos', 'nutricionistas', 'pacientes', 'disponibilidade', 'agendamento-manual', 'pre-agendamentos'))
        OR
        (area = 'unidade' AND link IN ('agenda', 'profissionais', 'medicos', 'nutricionistas', 'pacientes', 'disponibilidade', 'agendamento-manual', 'pre-agendamentos'))
        OR
        slug IN ('menu.empresa.agendamentos_root_top', 'menu.unidade.agendamentos_root_top')
   );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Todos', 'agendamentos', 'empresa', @empresa_ag_root, 0, @menu_id, '_self', 'ti ti-layout-grid', 'empresa-agendamentos', 'empresa_agendamentos', NULL
WHERE @empresa_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'empresa' AND slug = 'empresa-agendamentos'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Todos', 'agendamentos', 'unidade', @unidade_ag_root, 0, @menu_id, '_self', 'ti ti-layout-grid', 'menu.unidade.agendamentos', 'unidade_agendamentos', NULL
WHERE @unidade_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'unidade' AND slug = 'menu.unidade.agendamentos'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Pendentes', 'agendamentos', 'empresa', @empresa_ag_root, 1, @menu_id, '_self', 'ti ti-clock-hour-4', 'menu.empresa.agendamentos_pendentes', 'empresa_agendamentos_pendentes', 'preset=pendentes'
WHERE @empresa_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'empresa' AND slug = 'menu.empresa.agendamentos_pendentes'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Comparecimento', 'agendamentos', 'empresa', @empresa_ag_root, 2, @menu_id, '_self', 'ti ti-user-check', 'menu.empresa.agendamentos_comparecimento', 'empresa_agendamentos_comparecimento', 'preset=comparecimento'
WHERE @empresa_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'empresa' AND slug = 'menu.empresa.agendamentos_comparecimento'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Finalizacao', 'agendamentos', 'empresa', @empresa_ag_root, 3, @menu_id, '_self', 'ti ti-checkup-list', 'menu.empresa.agendamentos_finalizacao', 'empresa_agendamentos_finalizacao', 'preset=finalizacao'
WHERE @empresa_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'empresa' AND slug = 'menu.empresa.agendamentos_finalizacao'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Finalizados', 'agendamentos', 'empresa', @empresa_ag_root, 4, @menu_id, '_self', 'ti ti-circle-check', 'menu.empresa.agendamentos_finalizados', 'empresa_agendamentos_finalizados', 'preset=finalizados'
WHERE @empresa_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'empresa' AND slug = 'menu.empresa.agendamentos_finalizados'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Cancelamentos', 'agendamentos', 'empresa', @empresa_ag_root, 5, @menu_id, '_self', 'ti ti-ban', 'menu.empresa.agendamentos_cancelamentos', 'empresa_agendamentos_cancelamentos', 'preset=cancelamentos'
WHERE @empresa_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'empresa' AND slug = 'menu.empresa.agendamentos_cancelamentos'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Faltas', 'agendamentos', 'empresa', @empresa_ag_root, 6, @menu_id, '_self', 'ti ti-user-x', 'menu.empresa.agendamentos_faltas', 'empresa_agendamentos_faltas', 'preset=faltas'
WHERE @empresa_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'empresa' AND slug = 'menu.empresa.agendamentos_faltas'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Pendentes', 'agendamentos', 'unidade', @unidade_ag_root, 1, @menu_id, '_self', 'ti ti-clock-hour-4', 'menu.unidade.agendamentos_pendentes', 'unidade_agendamentos_pendentes', 'preset=pendentes'
WHERE @unidade_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'unidade' AND slug = 'menu.unidade.agendamentos_pendentes'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Comparecimento', 'agendamentos', 'unidade', @unidade_ag_root, 2, @menu_id, '_self', 'ti ti-user-check', 'menu.unidade.agendamentos_comparecimento', 'unidade_agendamentos_comparecimento', 'preset=comparecimento'
WHERE @unidade_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'unidade' AND slug = 'menu.unidade.agendamentos_comparecimento'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Finalizacao', 'agendamentos', 'unidade', @unidade_ag_root, 3, @menu_id, '_self', 'ti ti-checkup-list', 'menu.unidade.agendamentos_finalizacao', 'unidade_agendamentos_finalizacao', 'preset=finalizacao'
WHERE @unidade_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'unidade' AND slug = 'menu.unidade.agendamentos_finalizacao'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Finalizados', 'agendamentos', 'unidade', @unidade_ag_root, 4, @menu_id, '_self', 'ti ti-circle-check', 'menu.unidade.agendamentos_finalizados', 'unidade_agendamentos_finalizados', 'preset=finalizados'
WHERE @unidade_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'unidade' AND slug = 'menu.unidade.agendamentos_finalizados'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Cancelamentos', 'agendamentos', 'unidade', @unidade_ag_root, 5, @menu_id, '_self', 'ti ti-ban', 'menu.unidade.agendamentos_cancelamentos', 'unidade_agendamentos_cancelamentos', 'preset=cancelamentos'
WHERE @unidade_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'unidade' AND slug = 'menu.unidade.agendamentos_cancelamentos'
  );

INSERT INTO wpjy_menus_items (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Faltas', 'agendamentos', 'unidade', @unidade_ag_root, 6, @menu_id, '_self', 'ti ti-user-x', 'menu.unidade.agendamentos_faltas', 'unidade_agendamentos_faltas', 'preset=faltas'
WHERE @unidade_ag_root IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = @menu_id AND area = 'unidade' AND slug = 'menu.unidade.agendamentos_faltas'
  );

UPDATE wpjy_menus_items
   SET parent = @empresa_ag_root,
       label = 'Todos',
       sort = 0
 WHERE menu = @menu_id
   AND area = 'empresa'
   AND slug = 'empresa-agendamentos';

UPDATE wpjy_menus_items
   SET parent = @unidade_ag_root,
       label = 'Todos',
       sort = 0
 WHERE menu = @menu_id
   AND area = 'unidade'
   AND slug = 'menu.unidade.agendamentos';

UPDATE wpjy_menus_items
   SET parent = 542,
       sort = 90
 WHERE menu = @menu_id
   AND area = 'empresa'
   AND slug = 'menu.empresa.tiix-health';

UPDATE wpjy_menus_items
   SET parent = 714,
       sort = 90
 WHERE menu = @menu_id
   AND area = 'unidade'
   AND slug = 'menu.unidade.tiix-health';

COMMIT;

SELECT id, label, link, area, parent, sort, slug, parametro_url
  FROM wpjy_menus_items
 WHERE id = @tiix_root_id
    OR parent = @tiix_root_id
    OR parent IN (@empresa_ag_root, @unidade_ag_root)
 ORDER BY parent, area, sort, id;
