-- 2026-04-15
-- Libera a area da empresa para o gestor da Empresa Alpha
-- Objetivos:
-- 1) garantir grupo de acesso da empresa no contrato 64
-- 2) vincular o usuario gestor ao grupo
-- 3) garantir baseline do kit.empresa no contrato 64
-- 4) liberar os itens de menu da area /empresa
-- 5) completar namespaces/telas das paginas atuais da empresa
-- 6) adicionar Profissionais e Suporte no menu da empresa
--
-- Usuario alvo:
--   gestor.empresa.alpha@tiix.com.br
--
-- Contrato alvo:
--   64 = Empresa Alpha

SET @contract_empresa_id = 64;
SET @user_email = CONVERT('gestor.empresa.alpha@tiix.com.br' USING utf8mb4) COLLATE utf8mb4_unicode_520_ci;

SET @grupo_slug_empresa = CONVERT('empresa' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci;
SET @grupo_slug_empresas = CONVERT('empresas' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci;
SET @kit_slug_empresa = CONVERT('kit.empresa' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci;
SET @menu_root_slug = CONVERT('menu.area-da-empresa.35.18' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci;

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

-- 2) Kit empresa
SET @kit_empresa_id = (
    SELECT id
      FROM wpjy_perm_kits
     WHERE slug = @kit_slug_empresa
     LIMIT 1
);

-- 3) Garante baseline do kit no contrato da empresa
INSERT INTO wpjy_perm_contract_kit (id_contrato, kit_id, ativo)
SELECT @contract_empresa_id, @kit_empresa_id, 1
WHERE @kit_empresa_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
      FROM wpjy_perm_contract_kit
     WHERE id_contrato = @contract_empresa_id
       AND kit_id = @kit_empresa_id
  );

UPDATE wpjy_perm_contract_kit
   SET ativo = 1
 WHERE id_contrato = @contract_empresa_id
   AND kit_id = @kit_empresa_id;

-- 4) Grupo da empresa no contrato 64
INSERT INTO wpjy_grupos_permissoes
  (id_contrato, nome, slug, cor, icone, nivel, parent, descricao)
SELECT
  @contract_empresa_id,
  'Empresa Alpha',
  @grupo_slug_empresa,
  'primary',
  'building',
  2,
  NULL,
  'Grupo principal de acesso da area da empresa.'
WHERE NOT EXISTS (
  SELECT 1
    FROM wpjy_grupos_permissoes
   WHERE id_contrato = @contract_empresa_id
     AND (slug = @grupo_slug_empresa OR slug = @grupo_slug_empresas)
);

SET @group_empresa_id = (
    SELECT id
      FROM wpjy_grupos_permissoes
     WHERE id_contrato = @contract_empresa_id
       AND (slug = @grupo_slug_empresa OR slug = @grupo_slug_empresas)
     ORDER BY CASE WHEN slug = @grupo_slug_empresa THEN 0 ELSE 1 END, id ASC
     LIMIT 1
);

-- 5) Liga grupo ao kit.empresa
INSERT INTO wpjy_perm_group_kit (group_id, kit_id)
SELECT @group_empresa_id, @kit_empresa_id
WHERE @group_empresa_id IS NOT NULL
  AND @kit_empresa_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
      FROM wpjy_perm_group_kit
     WHERE group_id = @group_empresa_id
       AND kit_id = @kit_empresa_id
  );

-- 6) Vincula usuario ao grupo da empresa
INSERT INTO wpjy_usuario_grupo_permissao (id_usuario, id_grupo)
SELECT @user_id, @group_empresa_id
WHERE @user_id IS NOT NULL
  AND @group_empresa_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
      FROM wpjy_usuario_grupo_permissao
     WHERE id_usuario = @user_id
       AND id_grupo = @group_empresa_id
  );

-- 7) Permissoes de menu da area da empresa
INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'menu.area-da-empresa.35.18', 'Menu Area da Empresa', 'Exibir a raiz da area da empresa', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'menu.area-da-empresa.35.18');

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

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'empresa-unidades', 'Empresa - Unidades', 'Permissao de menu de unidades da empresa', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'empresa-unidades');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'empresa-profissionais', 'Empresa - Profissionais', 'Permissao de menu de profissionais da empresa', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'empresa-profissionais');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'empresa-niveis', 'Empresa - Niveis', 'Permissao de menu de niveis da empresa', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'empresa-niveis');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'empresa-aplicacoes', 'Empresa - Aplicacoes', 'Permissao de menu de aplicacoes da empresa', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'empresa-aplicacoes');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'empresa-unidade-editar', 'Empresa - Unidade Editar', 'Permissao de menu da edicao de unidade da empresa', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'empresa-unidade-editar');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'empresa-tickets', 'Empresa - Tickets', 'Permissao de menu de tickets da empresa', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'empresa-tickets');

INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'empresa-suporte', 'Empresa - Suporte', 'Permissao de menu de suporte da empresa', NULL, 'menu'
WHERE NOT EXISTS (SELECT 1 FROM wpjy_permissoes WHERE slug = 'empresa-suporte');

-- 8) Libera as permissoes legado no grupo da empresa
INSERT INTO wpjy_grupo_permissao (id_grupo, id_permissao)
SELECT @group_empresa_id, p.id
  FROM wpjy_permissoes p
 WHERE @group_empresa_id IS NOT NULL
   AND p.slug IN (
     'menu.area-da-empresa.35.18',
     'empresa',
     'empresa-unidades',
     'empresa-profissionais',
     'empresa-niveis',
     'empresa-aplicacoes',
     'empresa-unidade-editar',
     'empresa-tickets',
     'empresa-suporte'
   )
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_grupo_permissao gp
      WHERE gp.id_grupo = @group_empresa_id
        AND gp.id_permissao = p.id
   );

-- 9) Garante a raiz do menu empresa
INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT
  'Area da Empresa',
  '#',
  NULL,
  0,
  14,
  35,
  '_self',
  'lucide:building',
  'menu.area-da-empresa.35.18',
  NULL,
  NULL
WHERE NOT EXISTS (
  SELECT 1
    FROM wpjy_menus_items
   WHERE menu = 35
     AND slug = 'menu.area-da-empresa.35.18'
);

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

-- 10) Itens de menu da empresa
INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Início', 'index', 'empresa', @menu_root_id, 0, 35, '_self', 'solar:home-2-line-duotone', 'empresa', 'home', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = 35 AND area = 'empresa' AND link = 'index'
  );

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Unidades', 'unidades', 'empresa', @menu_root_id, 1, 35, '_self', 'solar:buildings-3-line-duotone', 'empresa-unidades', 'empresa_unidades', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = 35 AND area = 'empresa' AND link = 'unidades'
  );

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Profissionais', 'profissionais', 'empresa', @menu_root_id, 2, 35, '_self', 'solar:user-id-line-duotone', 'empresa-profissionais', 'empresa_profissionais', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = 35 AND area = 'empresa' AND link = 'profissionais'
  );

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Níveis', 'niveis', 'empresa', @menu_root_id, 3, 35, '_self', 'solar:medal-ribbon-star-line-duotone', 'empresa-niveis', 'empresa_niveis', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = 35 AND area = 'empresa' AND link = 'niveis'
  );

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Aplicações', 'aplicacoes', 'empresa', @menu_root_id, 4, 35, '_self', 'solar:user-check-rounded-line-duotone', 'empresa-aplicacoes', 'empresa_aplicacoes', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = 35 AND area = 'empresa' AND link = 'aplicacoes'
  );

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Unidade (Editar)', 'unidade-editar', 'empresa', @menu_root_id, 5, 35, '_self', 'solar:pen-2-line-duotone', 'empresa-unidade-editar', 'empresa_unidade_editar', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = 35 AND area = 'empresa' AND link = 'unidade-editar'
  );

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Tickets', 'tickets', 'empresa', @menu_root_id, 6, 35, '_self', 'solar:ticket-line-duotone', 'empresa-tickets', 'empresa_tickets', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = 35 AND area = 'empresa' AND link = 'tickets'
  );

INSERT INTO wpjy_menus_items
  (label, link, area, parent, sort, menu, target, icon, slug, tag, parametro_url)
SELECT 'Suporte', 'suporte', 'empresa', @menu_root_id, 7, 35, '_self', 'solar:lifebuoy-line-duotone', 'empresa-suporte', 'empresa_suporte', NULL
WHERE @menu_root_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1 FROM wpjy_menus_items
     WHERE menu = 35 AND area = 'empresa' AND link = 'suporte'
  );

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

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'empresa/unidades', 'Empresa - Unidades', 'Gestao de unidades da empresa', 'ti ti-building', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'empresa/unidades');

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'empresa/profissionais', 'Empresa - Profissionais', 'Profissionais e unidades da empresa', 'ti ti-users', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'empresa/profissionais');

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'empresa/niveis', 'Empresa - Niveis', 'Gestao de niveis da empresa', 'ti ti-medal', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'empresa/niveis');

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'empresa/aplicacoes', 'Empresa - Aplicacoes', 'Aplicacoes de profissionais da empresa', 'ti ti-user-check', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'empresa/aplicacoes');

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'empresa/unidade-editar', 'Empresa - Unidade Editar', 'Edicao de unidade da empresa', 'ti ti-pencil', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'empresa/unidade-editar');

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'empresa/suporte', 'Empresa - Suporte', 'Suporte da area da empresa', 'ti ti-lifebuoy', 1, NULL
WHERE NOT EXISTS (SELECT 1 FROM wpjy_telas WHERE arquivo = 'empresa/suporte');

-- 12) Namespaces da area da empresa
INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'empresa.unidades', 'Empresa: Unidades', 'Tela de unidades da empresa', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'empresa.unidades');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'empresa.profissionais', 'Empresa: Profissionais', 'Tela de profissionais da empresa', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'empresa.profissionais');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'empresa.niveis', 'Empresa: Niveis', 'Tela de niveis da empresa', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'empresa.niveis');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'empresa.aplicacoes', 'Empresa: Aplicacoes', 'Tela de aplicacoes da empresa', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'empresa.aplicacoes');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'empresa.unidade-editar', 'Empresa: Unidade Editar', 'Tela de edicao de unidade da empresa', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'empresa.unidade-editar');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'empresa.tickets', 'Empresa: Tickets', 'Tela de tickets da empresa', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'empresa.tickets');

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'empresa.suporte', 'Empresa: Suporte', 'Tela de suporte da empresa', 'contrato', 1
WHERE NOT EXISTS (SELECT 1 FROM wpjy_perm_namespaces WHERE ns = 'empresa.suporte');

-- 13) Mapeamento de arquivo -> namespace
INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
SELECT 'pages/empresa/index.php', 'empresa.home', 0
WHERE NOT EXISTS (
  SELECT 1 FROM wpjy_perm_tela_namespace
   WHERE padrao_arquivo = 'pages/empresa/index.php'
     AND ns = 'empresa.home'
);

INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
SELECT 'pages/empresa/unidades.php', 'empresa.unidades', 0
WHERE NOT EXISTS (
  SELECT 1 FROM wpjy_perm_tela_namespace
   WHERE padrao_arquivo = 'pages/empresa/unidades.php'
);

INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
SELECT 'pages/empresa/profissionais.php', 'empresa.profissionais', 0
WHERE NOT EXISTS (
  SELECT 1 FROM wpjy_perm_tela_namespace
   WHERE padrao_arquivo = 'pages/empresa/profissionais.php'
);

INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
SELECT 'pages/empresa/niveis.php', 'empresa.niveis', 0
WHERE NOT EXISTS (
  SELECT 1 FROM wpjy_perm_tela_namespace
   WHERE padrao_arquivo = 'pages/empresa/niveis.php'
);

INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
SELECT 'pages/empresa/aplicacoes.php', 'empresa.aplicacoes', 0
WHERE NOT EXISTS (
  SELECT 1 FROM wpjy_perm_tela_namespace
   WHERE padrao_arquivo = 'pages/empresa/aplicacoes.php'
);

INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
SELECT 'pages/empresa/unidade-editar.php', 'empresa.unidade-editar', 0
WHERE NOT EXISTS (
  SELECT 1 FROM wpjy_perm_tela_namespace
   WHERE padrao_arquivo = 'pages/empresa/unidade-editar.php'
);

INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
SELECT 'pages/empresa/suporte.php', 'empresa.suporte', 0
WHERE NOT EXISTS (
  SELECT 1 FROM wpjy_perm_tela_namespace
   WHERE padrao_arquivo = 'pages/empresa/suporte.php'
     AND ns = 'empresa.suporte'
);

INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
SELECT 'pages/empresa/tickets.php', 'empresa.tickets', 0
WHERE NOT EXISTS (
  SELECT 1 FROM wpjy_perm_tela_namespace
   WHERE padrao_arquivo = 'pages/empresa/tickets.php'
     AND ns = 'empresa.tickets'
);

-- 14) Allow dos namespaces no kit.empresa
INSERT INTO wpjy_perm_kit_namespace (kit_id, namespace_id, effect)
SELECT @kit_empresa_id, n.id, 'allow'
  FROM wpjy_perm_namespaces n
 WHERE @kit_empresa_id IS NOT NULL
   AND n.ns IN (
     'empresa.home',
     'empresa.unidades',
     'empresa.profissionais',
     'empresa.niveis',
     'empresa.aplicacoes',
     'empresa.unidade-editar',
     'empresa.tickets',
     'empresa.suporte'
   )
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_perm_kit_namespace kn
      WHERE kn.kit_id = @kit_empresa_id
        AND kn.namespace_id = n.id
   );

-- 15) Mapeamento opcional de telas para o kit.empresa
INSERT INTO wpjy_perm_tela_kit_map (id_tela, kit_id, prioridade)
SELECT t.id, @kit_empresa_id, 100
  FROM wpjy_telas t
 WHERE @kit_empresa_id IS NOT NULL
   AND t.arquivo IN (
     'empresa/index',
     'empresa/unidades',
     'empresa/profissionais',
     'empresa/niveis',
     'empresa/aplicacoes',
     'empresa/unidade-editar',
     'empresa/suporte'
   )
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_perm_tela_kit_map tk
      WHERE tk.id_tela = t.id
        AND tk.kit_id = @kit_empresa_id
   );

-- 16) Diagnostico final
SELECT
  @user_id                AS user_id,
  @group_empresa_id       AS group_empresa_id,
  @kit_empresa_id         AS kit_empresa_id,
  @menu_root_id           AS menu_root_id,
  @contract_empresa_id    AS contrato_empresa_id;

SELECT
    mi.id,
    mi.label,
    mi.link,
    mi.area,
    mi.parent,
    mi.sort,
    mi.slug
FROM wpjy_menus_items mi
WHERE mi.menu = 35
  AND (mi.id = @menu_root_id OR mi.parent = @menu_root_id)
ORDER BY mi.parent, mi.sort, mi.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_empresa_id
WHERE n.ns IN (
  'empresa.home',
  'empresa.unidades',
  'empresa.profissionais',
  'empresa.niveis',
  'empresa.aplicacoes',
  'empresa.unidade-editar',
  'empresa.tickets',
  'empresa.suporte'
)
ORDER BY n.ns;

SELECT
    p.slug AS permissao_slug
FROM wpjy_grupo_permissao gp
JOIN wpjy_permissoes p
  ON p.id = gp.id_permissao
WHERE gp.id_grupo = @group_empresa_id
  AND p.slug IN (
    'menu.area-da-empresa.35.18',
    'empresa',
    'empresa-unidades',
    'empresa-profissionais',
    'empresa-niveis',
    'empresa-aplicacoes',
    'empresa-unidade-editar',
    'empresa-tickets',
    'empresa-suporte'
  )
ORDER BY p.slug;
