class GestaoDeEstoque::ResponsavelDoAlmoxarifado < ApplicationRecord
  has_paper_trail

  include TradutorConcern

  belongs_to :almoxarifado, class_name: 'GestaoDeEstoque::Almoxarifado'
	belongs_to :agente_publico_municipal, class_name: 'Base::AgentePublicoMunicipal'

  validates_presence_of :data_de_entrada, :agente_publico_municipal_id
  validate :valida_data_de_saida
  validate :valida_responsavel

  validate :data_entrada_em_ano_possivel, if: Proc.new{ self.data_de_entrada.present? }
  validate :data_saida_em_ano_possivel, if: Proc.new{ self.data_de_saida.present? }
  validate :data_portaria_em_ano_possivel, if: Proc.new{ self.data_da_portaria.present? }

  validates_numericality_of :numero_da_portaria, if: -> {numero_da_portaria.present?}

  def valida_responsavel
    responsavel_existente = self.try(:almoxarifado).try(:existe_responsavel_periodo?,self.data_de_entrada, self.data_de_saida)

    if responsavel_existente.present?
      errors.add(:agente_publico_municipal_id, "já existe responsável no período informado.") if responsavel_existente.id != self.id
    end
  end

  def valida_data_de_saida
    if self.data_de_saida.present? && self.data_de_entrada.present?
      errors.add(:data_de_saida, "não pode ser anterior ou igual a Data de Entrada.") if self.data_de_saida <= self.data_de_entrada
    end
  end

  def pode_editar?
    (self.data_de_entrada.present? && self.data_de_saida.present?) ? false : true
  end

  def data_entrada_em_ano_possivel
    if self.data_de_entrada.year < 1990
      errors.add(:data_de_entrada, "Precisa ser a partir do ano 1990")
    end
  end

  def data_saida_em_ano_possivel
    if self.data_de_saida.year < 1990
      errors.add(:data_de_saida, "Precisa ser a partir do ano 1990")
    end
  end

  def data_portaria_em_ano_possivel
    if self.data_da_portaria.year < 1990
      errors.add(:data_da_portaria, "Precisa ser a partir do ano 1990")
    end
  end

end
