# app/policies/consolidacao_policy.rb
class ConsolidacaoPolicy < ApplicationPolicy
  def index?      = pode?('consolidacao.ver')
  def arquivadas? = index?
  def show?       = index?
  def create?     = pode?('consolidacao.criar')
  def new?        = create?

  # Editar uma consolidação JÁ FINALIZADA é outra permissão: mexer depois do
  # fechamento muda o valor que o motorista vai receber. Antes isso era "operador
  # não pode, gerente pode" cravado no código.
  def update?
    pode?('consolidacao.editar') && (!record_finalizada? || pode?('consolidacao.editar_finalizada'))
  end

  def edit? = update?

  def finalizar?         = pode?('consolidacao.finalizar')
  def finalizar_parcial? = finalizar?

  def arquivar? = pode?('consolidacao.arquivar')
  def reativar? = arquivar?

  def destroy?           = pode?('consolidacao.excluir')
  def excluir_motorista? = destroy?

  # Pagamento: registrar e estornar são chaves distintas — estornar desfaz algo
  # que já foi comunicado ao motorista.
  def registrar_pagamento? = pode?('consolidacao.registrar_pagamento')
  def cancelar_pagamento?  = pode?('consolidacao.cancelar_pagamento')

  # Quem entra e quem sai do fechamento (sem excluir de vez).
  def gerir_motoristas? = pode?('consolidacao.gerir_motoristas') && update?

  def exportar_pdf? = pode?('consolidacao.exportar_pdf')

  private

  def record_finalizada?
    record.respond_to?(:finalizada?) && record.finalizada?
  end
end
