class Licitacao::Ocorrencia < ApplicationRecord
	include TradutorConcern
	include IncrementadorDeCodigoConcern
	has_paper_trail

	belongs_to :processo, foreign_key: :projeto_id
	belongs_to :ata_da_sessao, foreign_key: :ata_da_sessao_id

	validates_presence_of :data_da_ocorrencia, :horario_da_ocorrencia, :tipo, :motivo, :projeto_id, :ata_da_sessao_id

	before_validation :atribui_numero, if: Proc.new { new_record? }
	before_validation :atribui_ata_da_sessao, if: Proc.new { self.ata_da_sessao_id.nil? && !self.projeto_id.nil? }

	after_create :suspender_ou_retomar_sessao_do_processo

	enum tipo: {
		credenciamento: 0,
		abertura_de_proposta: 1,
		lances: 2,
		habilitacao: 3,
		recurso: 4,
		adjudicacao: 5,
		suspensao: 6,
		retomada: 7,
		outros: 8
	}

	def pode_editar?
		self.suspensao? || self.retomada? || self.outros?
	end

	private

	def suspender_ou_retomar_sessao_do_processo
		processo.suspender! if self.suspensao?
		processo.retomar_sessao! if self.retomada?
	end

	def atribui_ata_da_sessao
		if self.retomada?
			self.ata_da_sessao_id = processo.atas_das_sessoes.create.id
		else
			self.ata_da_sessao_id = (processo.atas_das_sessoes.last || processo.atas_das_sessoes.create ).id
		end
	end

	def atribui_numero
		gerar_sugestao_codigo(:numero, 2, {projeto_id: processo.id}).to_i if numero.nil? && processo.present?
	end
end
