class Licitacao::ImportacaoTcmProcesso < ApplicationRecord
	has_paper_trail

	include TradutorConcern

	attr_default :importar_contratos, true
	attr_default :cria_processo_completo, true
	attr_default :cria_apenas_pedido, false
	attr_default :status, :pendente

	belongs_to :projeto, class_name: 'Licitacao::Projeto'
	belongs_to :pedido, class_name: "Licitacao::Pedido"
	belongs_to :categoria, class_name: "Base::Categoria"
	belongs_to :unidade_orcamentaria, class_name: "Loa::UnidadeOrcamentaria"

	has_many :importacoes_tcm_contratos, class_name: 'Licitacao::ImportacaoTcmContrato'
	has_many :importacoes_tcm_itens, class_name: 'Licitacao::ImportacaoTcmItem'

	accepts_nested_attributes_for :importacoes_tcm_contratos, reject_if: :all_blank, allow_destroy: true
	validates_associated :importacoes_tcm_contratos, on: :create

	validates_presence_of :exercicio, :numero_do_processo
	validates_uniqueness_of :numero_do_processo

	validates_length_of :exercicio, is: 4

	# after_validation :gera_processo_com_suas_dependecias, on: :create, unless: Proc.new { self.informar? } # não gerar dados se houver pendencia de informação da dotação
	before_update :alterar_status

	enum status: {
		pendente: 0,
		importado: 1,
		informar: 2,
		selecionado: 3
	}

	enum modalidade: {
		convite: 1,
		tomada_de_precos: 2,
		carona: 3,
		concorrencia_publica: 4,
		concurso: 5,
		pregao_presencial: 6,
		pregao_eletronico: 7,
		rdc: 8,
		dispensa_ou_inexibilidade: 9
	}

	def gera_processo_com_suas_dependecias
		ActiveRecord::Base.transaction do
			begin
				retorno = ImportacaoTcm::LicitacaoProcesso.importar(self) if !self.numero_do_processo.blank? && !self.exercicio.blank?
				if self.cria_processo_completo?
					self.projeto_id = retorno.id unless retorno.nil?
				elsif self.cria_apenas_pedido?
					self.pedido_id = retorno.id unless retorno.nil?
				end
				self.status = :importado
				self.data_da_importacao = Date.today
			rescue Exception => e
				errors.add(:base, e.message)
				raise ActiveRecord::Rollback
			end
		end
	end

	def alterar_status
		self.status = :selecionado if self.informar? && self.categoria_id.present? && self.unidade_orcamentaria_id.present?
	end

end
