-- 2026-04-15
-- ACL/Menu da area /unidade para a secretaria operacional da Empresa Alpha

SET @unit_contract_centro_id = 65;
SET @unit_contract_jardins_slug = CONVERT('unidade-jardins-alpha' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci;
SET @user_email = CONVERT('secretaria.unidades.alpha@tiix.com.br' USING utf8mb4) COLLATE utf8mb4_unicode_520_ci;

SET @group_slug_unit = CONVERT('assistentes-unidade' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci;
SET @group_slug_assistente = CONVERT('assistente' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci;
SET @kit_slug_assistente = CONVERT('kit.assistente' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci;

SET @user_id = (
    SELECT ID FROM wpjy_users
     WHERE user_email = @user_email
     ORDER BY ID ASC LIMIT 1
);

SET @kit_assistente_id = (
    SELECT id FROM wpjy_perm_kits
     WHERE slug = @kit_slug_assistente
     LIMIT 1
);

SET @unit_contract_jardins_id = (
    SELECT id FROM wpjy_contratos
     WHERE slug = @unit_contract_jardins_slug
     ORDER BY id ASC LIMIT 1
);

INSERT INTO wpjy_perm_contract_kit (id_contrato, kit_id, ativo)
SELECT @unit_contract_centro_id, @kit_assistente_id, 1
WHERE @kit_assistente_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_perm_contract_kit
     WHERE id_contrato = @unit_contract_centro_id
       AND kit_id = @kit_assistente_id
  );

INSERT INTO wpjy_perm_contract_kit (id_contrato, kit_id, ativo)
SELECT @unit_contract_jardins_id, @kit_assistente_id, 1
WHERE @unit_contract_jardins_id IS NOT NULL
  AND @kit_assistente_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_perm_contract_kit
     WHERE id_contrato = @unit_contract_jardins_id
       AND kit_id = @kit_assistente_id
  );

UPDATE wpjy_perm_contract_kit
   SET ativo = 1
 WHERE kit_id = @kit_assistente_id
   AND id_contrato IN (@unit_contract_centro_id, COALESCE(@unit_contract_jardins_id, -1));

INSERT INTO wpjy_grupos_permissoes
  (id_contrato, nome, slug, cor, icone, nivel, parent, descricao)
SELECT @unit_contract_centro_id, 'Assistentes da Unidade Centro', @group_slug_unit, 'primary', 'users', 6, NULL, 'Grupo operacional da Unidade Centro.'
WHERE NOT EXISTS (
  SELECT 1 FROM wpjy_grupos_permissoes
   WHERE id_contrato = @unit_contract_centro_id
     AND (slug = @group_slug_unit OR slug = @group_slug_assistente)
);

INSERT INTO wpjy_grupos_permissoes
  (id_contrato, nome, slug, cor, icone, nivel, parent, descricao)
SELECT @unit_contract_jardins_id, 'Assistentes da Unidade Jardins', @group_slug_unit, 'primary', 'users', 6, NULL, 'Grupo operacional da Unidade Jardins.'
WHERE @unit_contract_jardins_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_grupos_permissoes
     WHERE id_contrato = @unit_contract_jardins_id
       AND (slug = @group_slug_unit OR slug = @group_slug_assistente)
  );

SET @group_unit_centro_id = (
    SELECT id FROM wpjy_grupos_permissoes
     WHERE id_contrato = @unit_contract_centro_id
       AND (slug = @group_slug_unit OR slug = @group_slug_assistente)
     ORDER BY CASE WHEN slug = @group_slug_unit THEN 0 ELSE 1 END, id ASC
     LIMIT 1
);

SET @group_unit_jardins_id = (
    SELECT id FROM wpjy_grupos_permissoes
     WHERE id_contrato = @unit_contract_jardins_id
       AND (slug = @group_slug_unit OR slug = @group_slug_assistente)
     ORDER BY CASE WHEN slug = @group_slug_unit THEN 0 ELSE 1 END, id ASC
     LIMIT 1
);

INSERT INTO wpjy_perm_group_kit (group_id, kit_id)
SELECT @group_unit_centro_id, @kit_assistente_id
WHERE @group_unit_centro_id IS NOT NULL
  AND @kit_assistente_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_perm_group_kit
     WHERE group_id = @group_unit_centro_id
       AND kit_id = @kit_assistente_id
  );

INSERT INTO wpjy_perm_group_kit (group_id, kit_id)
SELECT @group_unit_jardins_id, @kit_assistente_id
WHERE @group_unit_jardins_id IS NOT NULL
  AND @kit_assistente_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_perm_group_kit
     WHERE group_id = @group_unit_jardins_id
       AND kit_id = @kit_assistente_id
  );

INSERT INTO wpjy_usuario_grupo_permissao (id_usuario, id_grupo)
SELECT @user_id, @group_unit_centro_id
WHERE @user_id IS NOT NULL
  AND @group_unit_centro_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_usuario_grupo_permissao
     WHERE id_usuario = @user_id
       AND id_grupo = @group_unit_centro_id
  );

INSERT INTO wpjy_usuario_grupo_permissao (id_usuario, id_grupo)
SELECT @user_id, @group_unit_jardins_id
WHERE @user_id IS NOT NULL
  AND @group_unit_jardins_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_usuario_grupo_permissao
     WHERE id_usuario = @user_id
       AND id_grupo = @group_unit_jardins_id
  );

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.area-da-unidade', 'Menu Area da Unidade', 'Exibir a raiz da area da unidade', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.area-da-unidade');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.unidade.home', 'Unidade - Inicio', 'Permissao da home da unidade', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.unidade.home');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.unidade.agenda', 'Unidade - Agenda', 'Permissao da agenda da unidade', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.unidade.agenda');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.unidade.equipe', 'Unidade - Equipe', 'Permissao da equipe da unidade', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.unidade.equipe');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.unidade.profissionais', 'Unidade - Profissionais', 'Permissao dos profissionais da unidade', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.unidade.profissionais');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.unidade.niveis', 'Unidade - Niveis', 'Permissao dos niveis da unidade', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.unidade.niveis');

INSERT INTO wpjy_grupo_permissao (id_grupo, id_permissao)
SELECT @group_unit_centro_id, p.id
  FROM wpjy_permissoes p
 WHERE @group_unit_centro_id IS NOT NULL
   AND p.slug IN (
     'menu.area-da-unidade',
     'menu.unidade.home',
     'menu.unidade.agenda',
     'menu.unidade.equipe',
     'menu.unidade.profissionais',
     'menu.unidade.niveis'
   )
   AND NOT EXISTS (
     SELECT 1 FROM wpjy_grupo_permissao gp
      WHERE gp.id_grupo = @group_unit_centro_id
        AND gp.id_permissao = p.id
   );

INSERT INTO wpjy_grupo_permissao (id_grupo, id_permissao)
SELECT @group_unit_jardins_id, p.id
  FROM wpjy_permissoes p
 WHERE @group_unit_jardins_id IS NOT NULL
   AND p.slug IN (
     'menu.area-da-unidade',
     'menu.unidade.home',
     'menu.unidade.agenda',
     'menu.unidade.equipe',
     'menu.unidade.profissionais',
     'menu.unidade.niveis'
   )
   AND NOT EXISTS (
     SELECT 1 FROM wpjy_grupo_permissao gp
      WHERE gp.id_grupo = @group_unit_jardins_id
        AND gp.id_permissao = p.id
   );

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Area da Unidade', '#', NULL, 0, 15, 35, '_self', 'lucide:building-hospital', 'menu.area-da-unidade', NULL, NULL
WHERE NOT EXISTS (
  SELECT 1 FROM wpjy_menus_items
   WHERE menu = 35
     AND slug = 'menu.area-da-unidade'
);

SET @menu_root_id = (
    SELECT id FROM wpjy_menus_items
     WHERE menu = 35
       AND slug = 'menu.area-da-unidade'
     ORDER BY id ASC LIMIT 1
);

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Inicio', 'index', 'unidade', @menu_root_id, 0, 35, '_self', 'solar:home-2-line-duotone', 'menu.unidade.home', 'home', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (SELECT 1 FROM wpjy_menus_items WHERE menu = 35 AND area = 'unidade' AND link = 'index');

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Agenda', 'agenda', 'unidade', @menu_root_id, 1, 35, '_self', 'ti ti-calendar-time', 'menu.unidade.agenda', 'unidade_agenda', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (SELECT 1 FROM wpjy_menus_items WHERE menu = 35 AND area = 'unidade' AND link = 'agenda');

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Equipe', 'equipe', 'unidade', @menu_root_id, 2, 35, '_self', 'ti ti-users-group', 'menu.unidade.equipe', 'unidade_equipe', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (SELECT 1 FROM wpjy_menus_items WHERE menu = 35 AND area = 'unidade' AND link = 'equipe');

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Profissionais', 'profissionais', 'unidade', @menu_root_id, 3, 35, '_self', 'ti ti-stethoscope', 'menu.unidade.profissionais', 'unidade_profissionais', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (SELECT 1 FROM wpjy_menus_items WHERE menu = 35 AND area = 'unidade' AND link = 'profissionais');

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Niveis', 'niveis', 'unidade', @menu_root_id, 4, 35, '_self', 'ti ti-medal', 'menu.unidade.niveis', 'unidade_niveis', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (SELECT 1 FROM wpjy_menus_items WHERE menu = 35 AND area = 'unidade' AND link = 'niveis');

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'unidade/index', 'Unidade - Inicio', 'Home da area da unidade', 'ti ti-home', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'unidade/index');

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'unidade/agenda', 'Unidade - Agenda', 'Agenda da unidade', 'ti ti-calendar-time', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'unidade/agenda');

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'unidade/equipe', 'Unidade - Equipe', 'Equipe e colaboradores da unidade', 'ti ti-users-group', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'unidade/equipe');

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'unidade/profissionais', 'Unidade - Profissionais', 'Profissionais da unidade', 'ti ti-stethoscope', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'unidade/profissionais');

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'unidade/niveis', 'Unidade - Niveis', 'Niveis do contrato da unidade', 'ti ti-medal', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'unidade/niveis');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'unidade.home', 'Unidade: Home', 'Home da area da unidade', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'unidade.home');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'unidade.agenda', 'Unidade: Agenda', 'Agenda operacional da unidade', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'unidade.agenda');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'unidade.equipe', 'Unidade: Equipe', 'Equipe operacional da unidade', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'unidade.equipe');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'unidade.profissionais', 'Unidade: Profissionais', 'Profissionais vinculados a unidade', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'unidade.profissionais');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'unidade.niveis', 'Unidade: Niveis', 'Niveis do contrato da unidade', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'unidade.niveis');

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

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

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

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

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

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

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

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

INSERT INTO wpjy_perm_kit_namespace (kit_id, namespace_id, effect)
SELECT @kit_assistente_id, n.id, 'allow'
  FROM wpjy_perm_namespaces n
 WHERE @kit_assistente_id IS NOT NULL
   AND n.ns IN ('unidade.home', 'unidade.agenda', 'unidade.equipe', 'unidade.profissionais', 'unidade.niveis')
   AND NOT EXISTS (
     SELECT 1 FROM wpjy_perm_kit_namespace kn
      WHERE kn.kit_id = @kit_assistente_id
        AND kn.namespace_id = n.id
   );

INSERT INTO wpjy_perm_tela_kit_map (id_tela, kit_id, prioridade)
SELECT t.id, @kit_assistente_id, 100
  FROM wpjy_telas t
 WHERE @kit_assistente_id IS NOT NULL
   AND t.arquivo IN ('unidade/index', 'unidade/agenda', 'unidade/equipe', 'unidade/profissionais', 'unidade/niveis')
   AND NOT EXISTS (
     SELECT 1 FROM wpjy_perm_tela_kit_map tk
      WHERE tk.id_tela = t.id
        AND tk.kit_id = @kit_assistente_id
   );

SELECT
    @user_id AS user_id,
    @group_unit_centro_id AS group_unit_centro_id,
    @group_unit_jardins_id AS group_unit_jardins_id,
    @kit_assistente_id AS kit_assistente_id,
    @menu_root_id AS menu_root_id,
    @unit_contract_centro_id AS contrato_unidade_centro_id,
    @unit_contract_jardins_id AS contrato_unidade_jardins_id;

SELECT n.ns, kn.effect
FROM wpjy_perm_namespaces n
LEFT JOIN wpjy_perm_kit_namespace kn
       ON kn.namespace_id = n.id
      AND kn.kit_id = @kit_assistente_id
WHERE n.ns IN ('unidade.home', 'unidade.agenda', 'unidade.equipe', 'unidade.profissionais', 'unidade.niveis')
ORDER BY n.ns;

SELECT id, label, link, area, parent, sort, slug
FROM wpjy_menus_items
WHERE menu = 35
  AND (slug = 'menu.area-da-unidade' OR area = 'unidade')
ORDER BY parent ASC, sort ASC, id ASC;
