-- 2026-04-16
-- Baseline escalavel de kits do TIIX HEALTH para empresa e unidade
-- Objetivos:
-- 1) parar de depender de grupos customizados por empresa/unidade para visibilidade das telas de saude
-- 2) garantir baseline por user_tipo -> kit para empresa e unidade
-- 3) garantir baseline por contrato -> kit para todos os contratos de EMPRESA e UNIDADE
-- 4) reforcar o caminho principal grupo -> kit apenas para grupos genericos, sem criar milhares de grupos dedicados
-- 5) completar o mapeamento tela -> kit das paginas operacionais de saude

SET @kit_slug_empresa = CONVERT('kit.empresa' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci;
SET @kit_slug_assistente = CONVERT('kit.assistente' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci;

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

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

-- 1) user_tipo -> kit
INSERT INTO wpjy_user_tipo_kit_map (user_tipo, kit_id, prioridade)
SELECT 'empresa', @kit_empresa_id, 50
WHERE @kit_empresa_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
      FROM wpjy_user_tipo_kit_map
     WHERE user_tipo = 'empresa'
       AND kit_id = @kit_empresa_id
  );

INSERT INTO wpjy_user_tipo_kit_map (user_tipo, kit_id, prioridade)
SELECT 'unidade', @kit_assistente_id, 50
WHERE @kit_assistente_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
      FROM wpjy_user_tipo_kit_map
     WHERE user_tipo = 'unidade'
       AND kit_id = @kit_assistente_id
  );

INSERT INTO wpjy_user_tipo_kit_map (user_tipo, kit_id, prioridade)
SELECT 'assistente', @kit_assistente_id, 60
WHERE @kit_assistente_id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
      FROM wpjy_user_tipo_kit_map
     WHERE user_tipo = 'assistente'
       AND kit_id = @kit_assistente_id
  );

UPDATE wpjy_user_tipo_kit_map
   SET prioridade = 50
 WHERE user_tipo = 'empresa'
   AND kit_id = @kit_empresa_id;

UPDATE wpjy_user_tipo_kit_map
   SET prioridade = 50
 WHERE user_tipo = 'unidade'
   AND kit_id = @kit_assistente_id;

UPDATE wpjy_user_tipo_kit_map
   SET prioridade = 60
 WHERE user_tipo = 'assistente'
   AND kit_id = @kit_assistente_id;

-- 2) contrato -> kit para contratos de EMPRESA
INSERT INTO wpjy_perm_contract_kit (id_contrato, kit_id, ativo)
SELECT c.id, @kit_empresa_id, 1
  FROM wpjy_contratos c
 WHERE @kit_empresa_id IS NOT NULL
   AND COALESCE(c.lixeira,0) = 0
   AND TRIM(UPPER(COALESCE(c.tipo,''))) = 'EMPRESA'
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_perm_contract_kit ck
      WHERE ck.id_contrato = c.id
        AND ck.kit_id = @kit_empresa_id
   );

UPDATE wpjy_perm_contract_kit ck
JOIN wpjy_contratos c
  ON c.id = ck.id_contrato
   SET ck.ativo = 1
 WHERE ck.kit_id = @kit_empresa_id
   AND COALESCE(c.lixeira,0) = 0
   AND TRIM(UPPER(COALESCE(c.tipo,''))) = 'EMPRESA';

-- 3) contrato -> kit para contratos de UNIDADE
INSERT INTO wpjy_perm_contract_kit (id_contrato, kit_id, ativo)
SELECT c.id, @kit_assistente_id, 1
  FROM wpjy_contratos c
  LEFT JOIN wpjy_contratos p
    ON p.id = c.contrato_pai
 WHERE @kit_assistente_id IS NOT NULL
   AND COALESCE(c.lixeira,0) = 0
   AND (
        TRIM(UPPER(COALESCE(c.tipo,''))) IN ('UNIT', 'UNIDADE')
        OR (
            TRIM(UPPER(COALESCE(c.tipo,''))) = ''
            AND TRIM(UPPER(COALESCE(p.tipo,''))) = 'EMPRESA'
        )
   )
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_perm_contract_kit ck
      WHERE ck.id_contrato = c.id
        AND ck.kit_id = @kit_assistente_id
   );

UPDATE wpjy_perm_contract_kit ck
JOIN wpjy_contratos c
  ON c.id = ck.id_contrato
LEFT JOIN wpjy_contratos p
  ON p.id = c.contrato_pai
   SET ck.ativo = 1
 WHERE ck.kit_id = @kit_assistente_id
   AND COALESCE(c.lixeira,0) = 0
   AND (
        TRIM(UPPER(COALESCE(c.tipo,''))) IN ('UNIT', 'UNIDADE')
        OR (
            TRIM(UPPER(COALESCE(c.tipo,''))) = ''
            AND TRIM(UPPER(COALESCE(p.tipo,''))) = 'EMPRESA'
        )
   );

-- 4) grupo generico -> kit (sem depender de slug customizado por empresa)
INSERT INTO wpjy_perm_group_kit (group_id, kit_id)
SELECT g.id, @kit_empresa_id
  FROM wpjy_grupos_permissoes g
  JOIN wpjy_perm_contract_kit ck
    ON ck.id_contrato = g.id_contrato
   AND ck.kit_id = @kit_empresa_id
   AND ck.ativo = 1
 WHERE @kit_empresa_id IS NOT NULL
   AND g.slug IN ('empresa', 'empresas')
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_perm_group_kit gk
      WHERE gk.group_id = g.id
        AND gk.kit_id = @kit_empresa_id
   );

INSERT INTO wpjy_perm_group_kit (group_id, kit_id)
SELECT g.id, @kit_assistente_id
  FROM wpjy_grupos_permissoes g
  JOIN wpjy_perm_contract_kit ck
    ON ck.id_contrato = g.id_contrato
   AND ck.kit_id = @kit_assistente_id
   AND ck.ativo = 1
 WHERE @kit_assistente_id IS NOT NULL
   AND g.slug IN ('assistente', 'assistentes', 'assistentes-unidade', 'unidade', 'unidades')
   AND NOT EXISTS (
     SELECT 1
       FROM wpjy_perm_group_kit gk
      WHERE gk.group_id = g.id
        AND gk.kit_id = @kit_assistente_id
   );

-- 5) 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 IN (
     'empresa/agendamentos',
     'empresa/agendamento-manual',
     'empresa/agendamento-editar',
     'empresa/pre-agendamentos',
     'empresa/pacientes',
     'empresa/paciente-editar',
     'empresa/medicos',
     'empresa/prontuario-editar',
     'empresa/prontuario-prescrever',
     'empresa/profissionais-disponibilidade',
     'empresa/disponibilidade'
   )
   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 IN (
     'unidade/agenda',
     'unidade/agendamentos',
     'unidade/agendamento-manual',
     'unidade/agendamento-editar',
     'unidade/pre-agendamentos',
     'unidade/pacientes',
     'unidade/paciente-editar',
     'unidade/medicos',
     'unidade/prontuario-editar',
     'unidade/prontuario-prescrever',
     'unidade/profissionais-disponibilidade',
     'unidade/disponibilidade'
   )
   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
    @kit_empresa_id AS kit_empresa_id,
    @kit_assistente_id AS kit_assistente_id,
    (
        SELECT COUNT(*)
          FROM wpjy_user_tipo_kit_map
         WHERE kit_id = @kit_empresa_id
           AND user_tipo = 'empresa'
    ) AS empresa_user_tipo_map,
    (
        SELECT COUNT(*)
          FROM wpjy_user_tipo_kit_map
         WHERE kit_id = @kit_assistente_id
           AND user_tipo IN ('unidade', 'assistente')
    ) AS unidade_user_tipo_map,
    (
        SELECT COUNT(*)
          FROM wpjy_perm_contract_kit ck
          JOIN wpjy_contratos c ON c.id = ck.id_contrato
         WHERE ck.kit_id = @kit_empresa_id
           AND ck.ativo = 1
           AND TRIM(UPPER(COALESCE(c.tipo,''))) = 'EMPRESA'
    ) AS contratos_empresa_com_kit,
    (
        SELECT COUNT(*)
          FROM wpjy_perm_contract_kit ck
          JOIN wpjy_contratos c ON c.id = ck.id_contrato
         WHERE ck.kit_id = @kit_assistente_id
           AND ck.ativo = 1
           AND TRIM(UPPER(COALESCE(c.tipo,''))) IN ('UNIT', 'UNIDADE')
    ) AS contratos_unidade_com_kit;
