# app/models/auditoria_log.rb
class AuditoriaLog < ApplicationRecord
  belongs_to :user, optional: true   # opcional caso user seja deletado

  ACOES = %w[criar editar finalizar arquivar excluir login logout].freeze

  validates :acao,     presence: true
  validates :entidade, presence: true

  scope :recentes, -> { order(created_at: :desc) }
  scope :por_user, ->(user_id) { where(user_id: user_id) }
  scope :por_entidade, ->(entidade) { where(entidade: entidade) }

  def self.registrar(user:, acao:, entidade:, entidade_id: nil,
                     dados_anteriores: {}, dados_novos: {}, request: nil)
    create!(
      user_id:          user&.id,
      acao:             acao.to_s,
      entidade:         entidade.to_s,
      entidade_id:      entidade_id,
      dados_anteriores: dados_anteriores,
      dados_novos:      dados_novos,
      ip_address:       request&.remote_ip,
      user_agent:       request&.user_agent
    )
  rescue => e
    Rails.logger.error("[AuditoriaLog] Erro ao registrar: #{e.message}")
  end
end
