-- 2026-04-17
-- Formaliza o faturamento manual por paciente no core de telas/permissoes
-- e libera as rotas de admin, empresa e unidade pelo modelo novo de namespace.
-- Idempotente: pode rodar mais de uma vez sem duplicar registros.

START TRANSACTION;

SET @kit_empresa_id := (SELECT id FROM wpjy_perm_kits WHERE slug = 'kit.empresa' LIMIT 1);
SET @kit_assistente_id := (SELECT id FROM wpjy_perm_kits WHERE slug = 'kit.assistente' LIMIT 1);

-- 1) Telas do fluxo
INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'faturamento-manual.php', 'Faturamento Manual', 'Fluxo financeiro assistido para criar pedido e emitir fatura manual por paciente', 'ti ti-file-invoice', 1, NULL
WHERE NOT EXISTS (
  SELECT 1
    FROM wpjy_telas
   WHERE arquivo = 'faturamento-manual.php'
);

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'empresa/faturamento-manual', 'Empresa - Faturamento Manual', 'Fluxo financeiro assistido para criar pedido e emitir fatura manual por paciente na empresa', 'ti ti-file-invoice', 1, NULL
WHERE NOT EXISTS (
  SELECT 1
    FROM wpjy_telas
   WHERE arquivo = 'empresa/faturamento-manual'
);

INSERT INTO wpjy_telas (arquivo, nome, descricao, icone, ativa, ajuda)
SELECT 'unidade/faturamento-manual', 'Unidade - Faturamento Manual', 'Fluxo financeiro assistido para criar pedido e emitir fatura manual por paciente na unidade', 'ti ti-file-invoice', 1, NULL
WHERE NOT EXISTS (
  SELECT 1
    FROM wpjy_telas
   WHERE arquivo = 'unidade/faturamento-manual'
);

-- 2) Permissao legada do admin para a tela tecnica
INSERT INTO wpjy_permissoes (slug, nome, descricao, id_tela, tipo)
SELECT 'admin.faturamento_manual.view', 'Faturamento Manual', 'Acesso a tela de faturamento manual por paciente', t.id, 'tela'
  FROM wpjy_telas t
 WHERE t.arquivo = 'faturamento-manual.php'
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_permissoes
      WHERE slug = 'admin.faturamento_manual.view'
   );

-- 3) Namespaces do modelo novo
INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'admin.faturamento-manual', 'Admin / Faturamento Manual', 'Fluxo de pedido e fatura manual por paciente no admin', 'contrato', 1
WHERE NOT EXISTS (
  SELECT 1
    FROM wpjy_perm_namespaces
   WHERE ns = 'admin.faturamento-manual'
);

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'empresa.faturamento_manual', 'Empresa: Faturamento Manual', 'Fluxo de pedido e fatura manual por paciente na empresa', 'contrato', 1
WHERE NOT EXISTS (
  SELECT 1
    FROM wpjy_perm_namespaces
   WHERE ns = 'empresa.faturamento_manual'
);

INSERT INTO wpjy_perm_namespaces (ns, label, descricao, escopo, ativo)
SELECT 'unidade.faturamento_manual', 'Unidade: Faturamento Manual', 'Fluxo de pedido e fatura manual por paciente na unidade', 'contrato', 1
WHERE NOT EXISTS (
  SELECT 1
    FROM wpjy_perm_namespaces
   WHERE ns = 'unidade.faturamento_manual'
);

-- 4) Mapeamento tela -> namespace
INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
VALUES ('pages/admin/faturamento-manual.php', 'admin.faturamento-manual', 1)
ON DUPLICATE KEY UPDATE ns = VALUES(ns), sensivel = VALUES(sensivel);

INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
VALUES ('pages/empresa/faturamento-manual.php', 'empresa.faturamento_manual', 1)
ON DUPLICATE KEY UPDATE ns = VALUES(ns), sensivel = VALUES(sensivel);

INSERT INTO wpjy_perm_tela_namespace (padrao_arquivo, ns, sensivel)
VALUES ('pages/unidade/faturamento-manual.php', 'unidade.faturamento_manual', 1)
ON DUPLICATE KEY UPDATE ns = VALUES(ns), sensivel = VALUES(sensivel);

-- 5) Allow dos kits operacionais corretos
INSERT INTO wpjy_perm_kit_namespace (kit_id, namespace_id, effect)
SELECT @kit_empresa_id, n.id, 'allow'
  FROM wpjy_perm_namespaces n
 WHERE n.ns = 'empresa.faturamento_manual'
   AND @kit_empresa_id IS NOT NULL
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_perm_kit_namespace kn
      WHERE kn.kit_id = @kit_empresa_id
        AND kn.namespace_id = n.id
   );

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

-- 6) Mapeamento tela -> kit para diagnostico e compatibilidade
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 = 'empresa/faturamento-manual'
   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
   );

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 = 'unidade/faturamento-manual'
   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
   );

COMMIT;

SELECT arquivo, nome
  FROM wpjy_telas
 WHERE arquivo IN ('faturamento-manual.php', 'empresa/faturamento-manual', 'unidade/faturamento-manual')
 ORDER BY arquivo;

SELECT slug, tipo
  FROM wpjy_permissoes
 WHERE slug IN ('admin.faturamento_manual.view')
 ORDER BY slug;

SELECT ns, label
  FROM wpjy_perm_namespaces
 WHERE ns IN ('admin.faturamento-manual', 'empresa.faturamento_manual', 'unidade.faturamento_manual')
 ORDER BY ns;

SELECT padrao_arquivo, ns, sensivel
  FROM wpjy_perm_tela_namespace
 WHERE padrao_arquivo IN (
   'pages/admin/faturamento-manual.php',
   'pages/empresa/faturamento-manual.php',
   'pages/unidade/faturamento-manual.php'
 )
 ORDER BY padrao_arquivo;

SELECT k.slug AS kit_slug, n.ns, kn.effect
  FROM wpjy_perm_kit_namespace kn
  JOIN wpjy_perm_kits k ON k.id = kn.kit_id
  JOIN wpjy_perm_namespaces n ON n.id = kn.namespace_id
 WHERE n.ns IN ('empresa.faturamento_manual', 'unidade.faturamento_manual')
 ORDER BY k.slug, n.ns;

SELECT t.arquivo, k.slug AS kit_slug, tk.prioridade
  FROM wpjy_perm_tela_kit_map tk
  JOIN wpjy_telas t ON t.id = tk.id_tela
  JOIN wpjy_perm_kits k ON k.id = tk.kit_id
 WHERE t.arquivo IN ('empresa/faturamento-manual', 'unidade/faturamento-manual')
 ORDER BY t.arquivo, k.slug;
