class GestaoDeEstoque::ManutencaoDoExtintor < ApplicationRecord
  has_paper_trail

  belongs_to :controle_de_extintor, class_name: 'GestaoDeEstoque::ControleDeExtintor'

  validates_presence_of :controle_de_extintor_id, :data_da_manutencao, :tipo_de_manutencao, :tipo_de_prazo, :prazo

  validates_numericality_of :prazo

  enum tipo_de_manutencao: {
    inspecao: 1,
    recarga: 2
  }

  enum tipo_de_prazo: {
    por_dia: 1,
    por_mes: 2,
    por_ano: 3
  }

  def data_de_expiracao_da_manutencao
    if self.data_da_manutencao.present? && self.tipo_de_prazo.present?
      if self.por_dia?
        return ( self.data_da_manutencao + self.prazo.to_i.day )
      elsif self.por_mes?
        return ( self.data_da_manutencao + self.prazo.to_i.month )
      else
        return ( self.data_da_manutencao + self.prazo.to_i.year )
      end
    end
  end

  def prazo_formatado
    unless self.por_mes?
      return "#{self.prazo} #{self.tipo_de_prazo_i18n}(s)"
    else
      return "#{self.prazo} #{self.tipo_de_prazo_i18n}(es)"
    end
  end

  def existe_inspecao_vigente?
    self.controle_de_extintor.manutencoes_do_extintor.any? { |manutencao| manutencao != self && manutencao.inspecao? && manutencao.data_de_expiracao_da_manutencao > self.data_da_manutencao }
  end

  def existe_recarga_vigente?
    self.controle_de_extintor.manutencoes_do_extintor.any? { |manutencao| manutencao != self && manutencao.recarga? && manutencao.data_de_expiracao_da_manutencao > self.data_da_manutencao  }
  end
end
