# Garante que o perfil "Administrador" tenha TODAS as permissões do catálogo.
#
# Por que existe: 20260826000003 é idempotente — se o perfil já foi criado, ela
# não volta a mexer nele. Isso é o certo para não desfazer ajuste do ADM, mas
# significa que uma permissão acrescentada ao catálogo DEPOIS daquele deploy
# (foi o caso de `notificacao.variaveis`) nunca chega ao perfil: o item some do
# menu e a URL responde "sem permissão", sem nada indicando o porquê.
#
# Mexe SÓ no perfil Administrador, e SÓ acrescentando: ele é, por definição,
# "acesso total ao sistema". Perfis criados pelo ADM e os demais de sistema
# ficam como estão.
class SincronizarPermissoesDoPerfilAdministrador < ActiveRecord::Migration[7.1]
  TODAS = %w[
    dashboard.ver dashboard.financeiro dashboard.operacoes dashboard.exportar dashboard.metricas
    consolidacao.ver consolidacao.criar consolidacao.editar consolidacao.editar_finalizada
    consolidacao.finalizar consolidacao.arquivar consolidacao.excluir
    consolidacao.registrar_pagamento consolidacao.cancelar_pagamento
    consolidacao.gerir_motoristas consolidacao.exportar_pdf
    notificacao.contatos notificacao.contatos_gerenciar notificacao.contatos_excluir
    notificacao.eventos notificacao.eventos_gerenciar notificacao.disparar_manual
    notificacao.variaveis notificacao.envios notificacao.credenciais notificacao.whatsapp_sessao
    admin.usuarios admin.usuarios_gerenciar admin.perfis
    admin.configuracoes admin.configuracoes_editar admin.auditoria
    admin.edicao_lancamento admin.planilha_simpli_route
  ].freeze

  def up
    return unless table_exists?(:perfis_acesso)

    execute(<<~SQL.squish)
      UPDATE perfis_acesso
         SET permissoes = #{quote(TODAS.to_json)}::jsonb, updated_at = NOW()
       WHERE sistema = true AND LOWER(nome) = 'administrador'
    SQL
  end

  # Sem volta: reduzir as permissões do administrador só criaria o problema que
  # esta migration conserta.
  def down; end
end
